【问题标题】:how to explain the linux comm command's wrong result如何解释 linux comm 命令的错误结果
【发布时间】:2023-03-05 08:13:01
【问题描述】:

所以我想比较两个文件(一个是行号: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

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

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

100079031
100109122
100109586
100168781
100197424
100203652

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

我的数据有问题吗?还是我遗漏了什么?

先谢谢你

【问题讨论】:

  • 仅供参考,“sn-ps”仅适用于可在浏览器中运行的代码(即 JavaScript)。使用编辑器中的{} 按钮进行其他块格式设置。

标签: linux comm


【解决方案1】:

comm 期望输入按照当前语言环境的字符排序顺序排序,按照数值排序。

-n 标志因此在这里是错误的。

要根据当前语言环境对数据进行排序将数据传递给comm,您可以使用进程替换(注意下面没有-n 标志):

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

并且输出正确:

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

【讨论】:

  • 非常感谢
  • 我画的百合多傻,再次感谢你
猜你喜欢
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2019-03-21
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多