我正在努力寻找一种有效的方法来学习新语言的词汇。我希望能够使用包含书籍的文件创建单词列表。我是 Linux 新手,非常感谢任何帮助。
我想:
有一个命令将文本文件(例如 txt 格式)作为输入并输出另一个文件,其中包含第一个文件中所有单个单词的列表。
新文件应按字母顺序排序且不包含重复项(每个单词仅应包含一次。)
理想情况下,该命令还应该能够检查第二个文件并避免重复该文件中包含的任何单词。 (这样我就可以创建一个我已经知道并且不会重复的文件或单词。)
有合适的命令来执行此操作吗?
答案1
如果将“单词”定义为一系列“单词组成字符”(通常定义为字母、数字和/或下划线)然后您可以使用 GNU 执行您想要的操作awk
:sort
awk -v RS='\\W+' 'ARGIND==1{arr[$0]; next} !($0 in arr)' skip file | sort -u
skip
您不想打印的单词文件在哪里,其中file
包含您的书。
\W
只是 的简写[^[:alnum:]_]
。但是,如果您对“单词”的定义不包括数字,则更改为RS='\\W+'
,RS='[^[:alpha:]_]+'
或者如果它包含撇号和连字符,则将其更改为RS="[^[:alpha:]_'-]+"
,或更改RS
为与您认为组成的字符集的定义的否定相匹配的任何其他内容字”。
要学习 awk,请阅读 Arnold Robbins 所著的《Effective AWK 编程》,第 5 版。