【问题标题】:How can I sort by first column textually and then by the second numerically with 'sort'?如何以文本方式按第一列排序,然后使用“排序”按第二列数字排序?
【发布时间】:2013-01-31 11:39:32
【问题描述】:

我正在尝试对以下文件进行排序:

a 2
b 1
a 10

我需要得到:

a 2
a 10
b 1

我知道 -kPOS[opts] 选项,并尝试使用它:

sort -k1 -k2n file

但这个命令只给我:

a 10
a 2
b 1

所以它按第一列排序,但不是按第二列。仅运行 sort -k2n file 按第二列排序。

b 1
a 2
a 10

如何按两列排序?

编辑:

排序(GNU coreutils)5.93

【问题讨论】:

    标签: linux shell unix sorting


    【解决方案1】:

    您必须终止主键,否则,排序会使用从给定字段开始的所有字段:

    sort -k1,1 -k2n
    

    【讨论】:

      【解决方案2】:

      这几乎是正确的。试试这个:

      sort -k1,1 -k2,2n
      

      【讨论】:

        【解决方案3】:

        如果您有GNU sort 排序,那么您可以进行版本排序:

        $ sort -V file
        a 2
        a 10
        b 1
        

        选项:

        -V, --version-sort          natural sort of (version) numbers within text
        

        版本排序的好处是不管列如何,它都可以工作:

        $ cat file
        a2
        b1
        a10
        
        $ sort -V file
        a2
        a10
        b1
        

        【讨论】:

        • 我使用 sort (GNU coreutils) 5.93。它没有-V 选项。
        • 我有sort (GNU coreutils) 8.15。太糟糕了,请检查 --help 以查看是否可以在其他选项下使用版本排序。
        • --help 中,除了--version,我没有看到任何版本选项。无论如何,魔法是什么? “版本排序”是什么意思?
        • 我在回答中添加了更多信息。
        猜你喜欢
        • 2016-11-07
        • 2016-07-19
        • 2012-02-28
        • 1970-01-01
        • 2021-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多