使用grep来查找两个大的单词列表之间的区别

我有一个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表示反转比赛。 换句话说,打印不符合任何模式的行。