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