如何在vi编辑器或linux中查找和删除两个文件中的重复行

时间:2013-12-10 10:17:10

标签: linux sed awk grep vi

我有2个文件A和B.两个都有超过100行。我想删除两个文件之间的公共线 答:

asdf123
fdsa123
rrrr456
yyyy555

B:

fdsa123
hhhh888
yyyy555

所以现在文件应该是
A1:

asdf123
rrrr456

B1:

hhhh888

2 个答案:

答案 0 :(得分:11)

您可以使用grep

$ grep -vf a b    # or   grep -vf a b > b1   to save it
hhhh888

$ grep -vf b a    # or   grep -vf b a > a1   to save it
asdf123
rrrr456

请注意,grep -f file1 file2会检查file1中显示的file2行。也就是说,从file1获取模式。

然后,grep -v代表反转匹配。也就是说,获得与grep命令相反的结果。

答案 1 :(得分:4)

您可以尝试:

awk -f del.awk fileA fileB > fileB.del
awk -f del.awk fileB fileA > fileA.del

其中del.awk

NR==FNR {
    a[$0]++
    next
}

! ($0 in a) {
    print
}