Linux排序不适用于负浮点数

时间:2012-04-05 15:05:55

标签: linux bash unix sorting ubuntu

如何对这种输入进行排序?

0.00159265291648695254
-0.00318530179313823899
0
0.00999983333416666468
0.00362937767285478371
0.00477794259012844049
-0.00637057126765263261
0.00681464007477014026
-0.00840724736714870645
-0.00522201549675090458

sort -n datasort -g data可以促成这一点:

0
0.00159265291648695254
-0.00318530179313823899
0.00362937767285478371
0.00477794259012844049
-0.00522201549675090458
-0.00637057126765263261
0.00681464007477014026
-0.00840724736714870645
0.00999983333416666468

另一方面,-1.whatever将位于零前面。我需要排序注意减号。谢谢。

3 个答案:

答案 0 :(得分:22)

所有这些麻烦都符合我的当地设置。我的ubuntu在捷克语:

$ echo $LANG
cs_CZ.UTF-8

在这个本地设置中,它不是一个小数点,而是一个十进制逗号,它将整数与其余部分分开(正如我们在数学课中所想的那样,在我们的语言中,我们确实写了逗号而不是一个点)。

因此:

echo '0,03 >> 0,4 >
> -0,3 >
> 0' | sort -n
> 0
> -0,3 >
> 0,4 >
0,03 >

如果您正在编写bash脚本,请将排序例程设置为使用“普通”设置。

export LC_ALL=C

答案 1 :(得分:2)

问题可能在您的sort命令中。如果我运行相同的结果我的结果是预期的:

$ echo '0.00159265291648695254
> -0.00318530179313823899
> 0
> 0.00999983333416666468
> 0.00362937767285478371
> 0.00477794259012844049
> -0.00637057126765263261
> 0.00681464007477014026
> -0.00840724736714870645
> -0.00522201549675090458' | sort -n
-0.00840724736714870645
-0.00637057126765263261
-0.00522201549675090458
-0.00318530179313823899
0
0.00159265291648695254
0.00362937767285478371
0.00477794259012844049
0.00681464007477014026
0.00999983333416666468

如果不使用它,你应该使用GNU排序

sort (GNU coreutils) 5.93
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.

答案 2 :(得分:1)

我有同样的问题。适用于1.0到-1.0之间的数字。 sort -n(或-g)不能解决它。最后,我将所有内容乘以大数,对其进行排序,然后再次对其进行划分。然而,我不明白为什么linux中会出现这样的错误