对于file1.txt中的每个字符串,检查它是否存在于file2.txt中然后执行某些操作

时间:2013-02-05 15:18:54

标签: string shell

我有两个txt文件,file1.txt和file2.txt。 它们都为每一行都有一个字符串。 file1.txt中的字符串是uniqe(无重复),以及file2.txt中的字符串。 这些文件有不同数量的字符串。

file1.txt                 file2.txt

FFF                       AAA
GGG                       BBB 
ZZZ                       CCC
                          ZZZ

我想比较这些文件,以便对于file1.txt中的每个字符串,如果它存在于file2.txt中,那么它就可以了。如果没有,那么将该字符串写入另一个文件(file3.txt)

在这个例子中,file3.txt将是:

file3.txt

FFF
GGG

我想使用命令shell,执行以下操作:

cat file1.txt | while read a; do something on file2.txt ...

但这不是强制性的。

2 个答案:

答案 0 :(得分:1)

请参阅grep的手册页,特别是-f选项。

grep -vf file2.txt file1.txt

答案 1 :(得分:0)

你最好的选择是读入文件2的输入,把它放在一个排序列表中(甚至更好,一个平衡的搜索树),然后当你从file1读取每行时,通过树或做对列表进行二进制搜索以查找字符串是否存在。

我们的想法是,您希望进行一次处理,以使尽可能容易检查的允许值列表。将它们放在二叉搜索树中意味着您首先将它与列表2中间(字母顺序)的单词进行比较,如果它在它之前,则采用左分支(其中包含在您刚刚比较的单词之前的单词) to,或者如果它来了,你只需看看正确的分支。

类似地,如果使用列表,则查看列表中间的单词,然后可以从每次迭代中删除剩余列表的一半。这意味着你只需要执行log n步骤来检查List1中的每个单词与list2中的n个单词。