【发布时间】: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
我试图用这样的数值对一个文件进行排序:
414e-05
435e-05
0.5361
0.7278
0.1341
0.9592
0.2664
通过 sort 所有的数字都得到排序,除了那些有指数的数字,排序函数有什么方法来评估这个表达式吗?
【问题讨论】:
标签: bash sorting command-line
我没有足够的代表。发表评论,所以我写这个来补充接受的答案:
对于那些使用逗号而不是句点来表示小数的语言环境,小数的排序将无法正常工作,正如HongboZhu指出的那样
解决方案:使用以下命令(重要的是 LC_ALL=C)时,使用句点分隔的数字对列表进行排序将正常工作:
ls yourFolder|LC_ALL=C sort -g
此解决方案来自以下帖子: https://unix.stackexchange.com/questions/506965/bash-sort-g-does-not-work-properly
【讨论】:
perl -e 'print sort { $a<=>$b } <>' < input-file
【讨论】:
如果您没有sort -g,您可以使用scisort 替代。
【讨论】:
如果你的排序命令版本足够新,它应该支持 -g 选项(或 --general-numeric-sort) 如果你喜欢你的选项长)。信息手册中是这样描述的:
数字排序,使用标准C函数
strtod将每行的前缀转换为双精度浮点 数字。这允许以科学的方式指定浮点数 表示法,例如“1.0e-34”和“10e100”。
【讨论】: