我有两个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 ...
但这不是强制性的。
答案 0 :(得分:1)
请参阅grep的手册页,特别是-f选项。
grep -vf file2.txt file1.txt
答案 1 :(得分:0)
你最好的选择是读入文件2的输入,把它放在一个排序列表中(甚至更好,一个平衡的搜索树),然后当你从file1读取每行时,通过树或做对列表进行二进制搜索以查找字符串是否存在。
我们的想法是,您希望进行一次处理,以使尽可能容易检查的允许值列表。将它们放在二叉搜索树中意味着您首先将它与列表2中间(字母顺序)的单词进行比较,如果它在它之前,则采用左分支(其中包含在您刚刚比较的单词之前的单词) to,或者如果它来了,你只需看看正确的分支。
类似地,如果使用列表,则查看列表中间的单词,然后可以从每次迭代中删除剩余列表的一半。这意味着你只需要执行log n步骤来检查List1中的每个单词与list2中的n个单词。