Bash:用指数对数字进行排序

时间:2010-12-01 13:42:14

标签: bash sorting command-line

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

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

使用sort对所有的numers进行排序,除了带有指数的那些,是否有一些方法可以使用sort函数来计算这个表达式?

4 个答案:

答案 0 :(得分:33)

如果你的sort命令版本足够新,它应该支持 -g 选项(或 - general-numeric-sort)如果你喜欢你的选择长)。在信息手册中对此进行了描述:

  

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

如果您没有sort -g,则可以选择scisort

答案 3 :(得分:2)

我没有足够的代表。发表评论,所以我写这是为了补充公认的答案:

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

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

ls yourFolder|LC_ALL=C sort -g

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