如何解释linux comm命令的错误结果

时间:2017-06-24 16:04:24

标签: linux comm

所以我想比较两个文件(一个有行号:30000和其他10000个),但是comm的结果让我感到惊讶

首先输入的内容是:

79044630
79562151
80746665
81776377
100079031
100109122
100109586
100168781
100197424
100203652

第二个输入内容是:

79044619
79562151
80746665
81776367
100079031
100109122
100109586
100168781
100197424
100203652
100318504
100322466
100345449
100365010
100422997
41325291528
41374900954
41680701471
41777751048
41783905750

运行comm first second的输出:

    79044619
79044630
        79562151
        80746665
    81776367
    100079031
    100109122
    100109586
    100168781
    100197424
    100203652
    100318504
    100322466
    100345449
    100365010
    100422997
    41325291528
    41374900954
    41680701471
    41777751048
    41783905750
81776377
100079031
100109122
100109586
100168781
100197424
100203652

提示:在使用sort -n命令之前,我使用comm命令对输入数据进行排序!

comm命令的错误结果与数据有关:

100079031
100109122
100109586
100168781
100197424
100203652

这些数据应该打印在第三列,因为它们存在于两个文件中!!!

我的数据有问题吗?或者我错过了什么?

先谢谢你

1 个答案:

答案 0 :(得分:2)

comm期望输入根据当前区域设置的字符整理顺序排序,根据数值。

-n标志因此是错误的东西。

要根据当前区域设置对数据进行排序,而将其传递给comm,您可以使用流程替换(并注意没有{{1}下面的标志):

-n

输出正确:

comm <(sort <first) <(sort <second)