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