差异给出了所有不同的,但人类比较显示平等

我有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