【问题标题】:Sorting numbers with multiple decimals in bash在bash中对具有多个小数的数字进行排序
【发布时间】:2021-08-05 12:12:31
【问题描述】:

bash 中使用sort-n 选项不会给我预期的结果。

$ cat numbers | sort -n
1.0
1.1
1.11.4
1.15
1.3
1.3.3
1.4-p1
1.6.1
2.2.10
2.2.2
2.4
2.4.6

我尝试使用-k1-k1.1n 等(-k1.3n 仅对以1 开头的数字的顺序正确)。看来我在这里缺少一些非常基本的东西......

【问题讨论】:

    标签: linux bash sorting


    【解决方案1】:

    -V 有一个特殊标志,用于表示版本号

    $ sort -V numbers
    
    1.0
    1.1
    1.3
    1.3.3
    1.4-p1
    1.6.1
    1.11.4
    1.15
    2.2.2
    2.2.10
    2.4
    2.4.6
    

    ps。此选项在 GNU Coreutils 中可用,但在其他实现中可能会丢失。

    【讨论】:

    • 这不是 OSX 上的有效选项。
    • 作为一个小兴趣点:OS X 附带的sort 实际上 GNU sort,但它已经很老了,并且早于对@ 的支持987654325@;从 OS X 10.11 开始,版本号为 sort (GNU coreutils) 5.93
    • @mklement0:看来他们已将-V 添加到macOS sort --version 2.3-Apple (99)
    【解决方案2】:

    你需要 -t。标志以指定“。”作为您的分隔符,并且多个关键位置说明符处理逐渐更长/更深的数字。我仍然不太明白它是如何工作的,但它确实有效......

     sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n numbers
    

     cat numbers | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n
    

    【讨论】:

      【解决方案3】:
      sort -g numbers
      

      会的。根据排序手册页,-g 用于数字排序:

      -g, --general-numeric-sort

      按一般数值比较

      【讨论】:

        【解决方案4】:

        试试;

        排序 -g -k1 文件

        一定会成功!!!

        【讨论】:

          猜你喜欢
          • 2013-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多