【问题标题】:Bash sort -nu results in unexpected behaviourBash sort -nu 导致意外行为
【发布时间】:2017-07-20 11:49:54
【问题描述】:

我的一位同事今天注意到 sort 命令的一些奇怪行为,我想知道是否有人知道该命令的输出是否是故意的?

给定文件:

ABC_22
ABC_43
ABC_1
ABC_1
ABC_43
ABC_10
ABC_123

我们希望使用数字排序对文件进行排序,并使其具有唯一性,因此我们运行:

sort file.txt -nu

输出是:

ABC_22

现在,我们知道数字排序在这种情况下不起作用,因为行不以数字开头(这很好,这只是较大脚本的一部分),但我本来期望更多的东西行:

ABC_1
ABC_10
ABC_123
ABC_22
ABC_43

有人知道为什么不是这样吗?如果仅单独给出 -u 或 -n 选项,则排序行为就像人们期望的那样。

【问题讨论】:

    标签: linux bash shell sorting command


    【解决方案1】:

    -nan empty number is zero

    按数字排序。数字开始于每一行,包括可选的 空格、可选的“-”号和可能的零个或多个数字 由千位分隔符分隔,可选地后跟一个 小数点字符和零个或多个数字。一个空号是 视为“0”。

    所有这些行的开头都有一个空数字,因此它们都为零,因为sort 的数字唯一性。如果每一行都以相同的数字开头,比如1,效果将是相同的。您应该明确指定包含数字的字段,或使用版本排序 (-V):

    $ sort -Vu foo
    ABC_1
    ABC_10
    ABC_22
    ABC_43
    ABC_123 
    

    【讨论】:

      【解决方案2】:

      您没有将GNU sort 的第二个字段的分隔指定为

      sort -nu -t'_' -k2 file
      ABC_1
      ABC_10
      ABC_22
      ABC_43
      ABC_123
      

      标志-n 用于数字排序,-u 用于唯一行,key 部分是将分隔符设置为_ 并在_ 完成后的第二个字段上排序-k2.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        • 2018-11-11
        • 2021-06-04
        • 1970-01-01
        相关资源
        最近更新 更多