-3

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

4

2 回答 2

3

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

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)
于 2013-10-28T14:45:50.507 回答
1

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

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

while read word; do …; done < B

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

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

也许这有帮助。

于 2013-10-28T14:29:32.313 回答