如何比较两个行数相同的文件并仅获取不同的行

如何比较两个行数相同的文件并仅获取不同的行

给定 2 个文件,它们有相同的行数,是否可能得到一个 diff仅有的改变(c),换句话说,没有添加(a)和删除(d)?

例如,这里有 2 个文件,每个文件有 10 行。

文件1.txt:

apple
apple
pear
grape
pear
grape
pear
pear
pear
apple

文件2.txt:

apple
apple
pear
pear
pear
pear
pear
pear
pear
apple

调用diff file1.txt file2.txt会产生:

4d3
< grape
6c5,6
< grape
---
> pear
> pear

是否有可能得到如下结果:

4c4
< grape
---
> pear
6c6
< grape
---
> pear

答案1

尝试这个:

diff <(nl file1.txt) <(nl file2.txt) | awk '{$2=""; print}' | sed -e 's/^\([<>]\)  /\1 /'

nl命令对行进行编号,这样就可以使用diff 逐行。该awk命令选择输出中diff除由 添加的行号之外的所有内容nl。换句话说,它会删除行号。该命令会删除留下的sed尴尬的额外空格。awk

相关内容