-1

我有两个 txt 文件,file1.txt 和 file2.txt。它们的每一行都有一个字符串。file1.txt 中的字符串是唯一的(无重复),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

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

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

但这不是强制性的。

4

2 回答 2

1

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

grep -vf file2.txt file1.txt
于 2013-02-05T15:24:37.960 回答
0

您最好的选择是从文件 2 中读取输入,将其放入排序列表(或者甚至更好的是平衡搜索树),然后当您从文件 1 中读取每一行时,遍历树或进行二分搜索列表中查找字符串是否存在。

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

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

于 2013-02-05T15:24:19.410 回答