我有一个78k行.txt文件,英文单词和一个5k行.txt文件,最常用的英文单词。 我想整理大列表中最常用的单词,以便我列出一个不常见的单词。
我在另一个问题上解决了我的问题,但我真的想知道,我做错了,因为这不起作用。
我已经尝试了以下内容:
//To make sure they are trimmed cut -d" " -f1 78kfile.txt | tac | tac > 78kfile.txt cut -d" " -f1 5kfile.txt | tac | tac > 5kfile.txt grep -xivf 5kfile.txt 78kfile.txt > cleansed //But this procedure apparently gives me two empty files.
如果我只是先运行grep而不是先剪切,那么我知道这两个文件都是我所知道的。
我也试过这个:
sort 78kfile.txt > 78kfile-sorted.txt sort 5kfile.txt > 5kfile-sorted.txt comm -3 78kfile-sorted.txt 5kfile-sorted.txt //No luck either
这两个文本文件,如果有人想为他们自己尝试: https : //www.dropbox.com/s/dw3k8ragnvjcfgc/5k-most-common-sorted.txt https://www.dropbox.com/s/1cvut5z2zp9qnmk /brit-az-sorted.txt
下载你的文件后,我注意到(a) brit-az-sorted.txt
有Microsoft行结尾,而5k-most-common-sorted.txt
有Unix行结尾和(b)你试图做全行比较grep -x
)。 所以,首先我们需要转换成一个共同的结局:
dos2unix <brit-az-sorted.txt >brit-az-sorted-fixed.txt
现在,我们可以使用grep
来删除常用的单词:
grep -xivFf 5k-most-common-sorted.txt brit-az-sorted-fixed.txt >less-common.txt
我还添加了-F
标志以确保这些单词将被解释为固定字符串而不是正则表达式。 这也加快了速度。
我注意到在5k-most-common-sorted.txt
文件中有5k-most-common-sorted.txt
不在brit-az-sorted.txt
。 例如,“英国”是通用文件,但不是较大的文件。 普通文件也有“铝”,而大文件只有“铝”。
grep选项是什么意思? 对于那些好奇的人:
-f
表示从文件中读取模式。
-F
表示将它们视为固定模式,而不是正则表达式,
-i
意思是忽略大小写。
-x
表示进行全线匹配
-v
表示反转比赛。 换句话说,打印不符合任何模式的行。