我有一个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
答案 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
表示反转匹配。换句话说,打印那些与任何模式都不匹配的行。