【问题标题】:Bash: sort numbers with exponentsBash:用指数对数字进行排序
【发布时间】:2011-05-18 12:25:15
【问题描述】:

我试图用这样的数值对一个文件进行排序:

414e-05
435e-05
0.5361
0.7278
0.1341
0.9592
0.2664

通过 sort 所有的数字都得到排序,除了那些有指数的数字,排序函数有什么方法来评估这个表达式吗?

【问题讨论】:

    标签: bash sorting command-line


    【解决方案1】:

    我没有足够的代表。发表评论,所以我写这个来补充接受的答案:

    对于那些使用逗号而不是句点来表示小数的语言环境,小数的排序将无法正常工作,正如HongboZhu指出的那样

    解决方案:使用以下命令(重要的是 LC_ALL=C)时,使用句点分隔的数字对列表进行排序将正常工作:

    ls yourFolder|LC_ALL=C sort -g
    

    此解决方案来自以下帖子: https://unix.stackexchange.com/questions/506965/bash-sort-g-does-not-work-properly

    【讨论】:

      【解决方案2】:

       

      perl -e 'print sort { $a<=>$b } <>' < input-file
      

      【讨论】:

        【解决方案3】:

        如果您没有sort -g,您可以使用scisort 替代。

        【讨论】:

        • 我有排序 8.23 并且“g”选项不起作用。 @mob 感谢您的解决方案。
        【解决方案4】:

        如果你的排序命令版本足够新,它应该支持 -g 选项(或 --general-numeric-sort) 如果你喜欢你的选项长)。信息手册中是这样描述的:

        数字排序,使用标准C函数strtod 将每行的前缀转换为双精度浮点 数字。这允许以科学的方式指定浮点数 表示法,例如“1.0e-34”和“10e100”。

        【讨论】:

        • 但 -g 似乎不能对浮点数和科学记数法的混合进行排序。我有排序 8.25 并将前两个数字放在最后。
        • 哦,我的错。我有一个欧洲语言环境。
        猜你喜欢
        • 2012-11-01
        • 2021-02-07
        • 2013-06-08
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 2015-11-13
        相关资源
        最近更新 更多