如何在两个文本文件之间找到相同的部分?

时间:2013-10-28 14:22:12

标签: linux bash compare

这是两个文本文件,A和B都包含多个单词项,由换行符或空格分隔。 现在我想比较A和B,在两个文件中找到相同的项目,然后从A中删除它们, 在bash.Any好主意?

2 个答案:

答案 0 :(得分:3)

Alfe的答案看起来是正确的。但是,如果您不关心输出文件中的单词分隔符,那么这可能是优化的解决方案:

grep -w -v -f <(sed 's/[ \n\t]\+/\n/g' A) <(sed '$s/[ \n\t]\+/\n/g' B)

如果两个文件中的数据都是排序/相同的序列,那么您也可以使用comm

comm -13 <(sed 's/[ \n\t]\+/\n/g' A) <(sed 's/[ \n\t]\+/\n/g' B)

答案 1 :(得分:1)

我不确定我是否理解正确,所以这个答案在黑暗中有点拍摄。

首先,我将创建每行包含一个单词的文件版本。然后我会介绍B:

while read word; do …; done < B

对于B中发现的每个单词,我会将其从A中移除(在......上面):

sed -i "s/^$word$//" A

也许这有帮助。