Bash排序有时会失败

时间:2013-10-23 14:09:15

标签: bash sorting double

问题在于:

echo -e " 1.0101010101010102 Ok \n 
     1.00 Ok \n 
     1.010204081632653 Ok \n 
     1.010752688172043 Ok \n 
     1.0 FAIL \n 
     1.010989010989011 Ok" 
| sort -n

返回

 1.00 Ok 
 1.0101010101010102 Ok 
 1.010204081632653 Ok 
 1.010752688172043 Ok 
 1.010989010989011 Ok
 1.0 FAIL 

显然,只有“i.0”-form值才会出现错误。排序选项“-g”也有同样奇怪的结果。

有没有人知道为什么会这样做,以及如何纠正排序......?

1 个答案:

答案 0 :(得分:4)

如果您使用的是GNU排序,则需要使用-g而不是-n来排序浮点值。 -n仅适用于整数。

最有可能的问题是,您的区域设置未设置为C区域设置。许多区域设置会干扰数字排序,特别是浮点数(某些区域设置希望将逗号视为小数分隔符)。试试这个:

LC_COLLATE= sort -g

如果您使用其他类别,则需要阅读其文档。