我有2个文件:
2 m1.small 1 m3.large 2 m3.medium 2 t1.micro 1 t2.large 7 t2.medium 4 t2.micro 7 t2.small
和b:
1 c4.2xlarge 1 c4.large 2 m1.small 1 m3.large 3 m3.medium 1 m4.large 3 t1.micro 3 t2.large 11 t2.medium 7 t2.micro 7 t2.small
当我使用sdiff时,我得到了所有不同的结果:
$ sdiff ab 2 m1.small | 1 c4.2xlarge 1 m3.large | 1 c4.large 2 m3.medium | 2 m1.small 2 t1.micro | 1 m3.large 1 t2.large | 3 m3.medium 7 t2.medium | 1 m4.large 4 t2.micro | 3 t1.micro 7 t2.small | 3 t2.large > 11 t2.medium > 7 t2.micro > 7 t2.small
而我至less可以清楚地看到比赛
2 m1.small 1 m3.large 7 t2.small
为什么是这样,我可以做任何事情来优化从差异获得的结果。
我也试过融合(窗口差异工具),这给了我完全一样的结果。
Difftypes的实用程序将逐行比较文件,而您似乎对两行文件是否共有行感兴趣。
comm实用程序可能是你正在寻找的,然而文件将需要一些预处理(字段顺序和sorting):
cat a | awk '{ print $2 " " $1}' | sort > as cat b | awk '{ print $2 " " $1}' | sort > bs
然后你可以执行comm:
comm as bs
它以3列的forms输出(出现在左侧,右侧或两者中):
c4.2xlarge 1 c4.large 1 m1.small 2 m3.large 1 m3.medium 2 m3.medium 3 m4.large 1 t1.micro 2 t1.micro 3 t2.large 1 t2.large 3 t2.medium 11 t2.medium 7 t2.micro 4 t2.micro 7 t2.small 7
也可以仅在左侧文件( comm -2 -3 )或右侧文件( comm -1 -3 )中发出行。
这与我认为你可以得到的结果差不多。
其实这个问题似乎几乎相同https://stackoverflow.com/questions/373810/unix-command-to-find-lines-common-in-two-files
可以在那里find一个通用的替代解决scheme,以便使用awk来识别通用行。 我在这里重现它,因为它非常优雅:
awk 'NR==FNR{arr[$0];next} $0 in arr' ab