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

时间:2014-02-17 22:41:30

标签: linux shell sorting grep comm

我有一个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-a-z-sorted.txt

1 个答案:

答案 0 :(得分:3)

下载文件后,我注意到(a)brit-a-z-sorted.txt有Microsoft行结尾,而5k-most-common-sorted.txt有Unix行结尾,(b)你试图进行全行比较({{1} }})。所以,首先我们需要转换为公共行结尾:

grep -x

现在,我们可以使用dos2unix <brit-a-z-sorted.txt >brit-a-z-sorted-fixed.txt 删除常用字词:

grep

我还添加了grep -xivFf 5k-most-common-sorted.txt brit-a-z-sorted-fixed.txt >less-common.txt 标志,以确保将单词解释为固定字符串而不是正则表达式。这也加快了速度。

我注意到-F文件中有多个单词不在5k-most-common-sorted.txt中。例如,“British”位于公共文件中,但不是较大的文件。普通文件也有“铝”,而较大的文件只有“铝”。

grep选项意味着什么?对于那些好奇的人:

brit-a-z-sorted.txt表示从文件中读取模式。

-f意味着将它们视为固定模式,而非正则表达式

-F意味着忽略大小。

-i表示进行全线匹配

-x表示反转匹配。换句话说,打印那些与任何模式都不匹配的行。