3

我有一个包含英国单词的 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 而不先 cut ,我会得到我知道的两个文件中的单词。

我也试过这个:

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

4

1 回答 1

4

下载文件后,我注意到 (a)brit-a-z-sorted.txt具有 Microsoft 行结尾,而5k-most-common-sorted.txt具有 Unix 行结尾,并且 (b) 您正在尝试进行整行比较 ( 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文件中有几个单词不在brit-a-z-sorted.txt. 例如,“British”在通用文件中,但不在较大的文件中。普通文件也有“铝”,而较大的文件只有“铝”。

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

-f表示从文件中读取模式。

-F意味着将它们视为固定模式,而不是正则表达式,

-i意思是忽略大小写。

-x表示进行整行匹配

-v意味着反转比赛。换句话说,打印那些与任何模式都不匹配的行。

于 2014-02-17T23:03:55.693 回答