【问题标题】:Linux sort doesn't work with negative float numbersLinux 排序不适用于负浮点数
【发布时间】:2012-04-19 08:15:03
【问题描述】:

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

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 会在零之前。我需要那种注意到减号的东西。谢谢。

【问题讨论】:

  • 您使用哪种类型的 UNIX?我的 Ubuntu 使用 -g-n 都很好。
  • 这很奇怪,我也在使用 ubuntu (Ubuntu 11.10)
  • 我也在运行 11.10。我的排序使用/usr/bin/sort 给出了您的确切输出没有任何参数,但-g-n 都有效。
  • 我试过了..sort is /usr/bin/sort如何获取排序版本?
  • 我就是不明白,我朋友的 kubuntu 也是这么说的。。pastebin.com/zpYkrznv

标签: linux bash unix sorting ubuntu


【解决方案1】:

问题可能出在您的排序命令中。如果我运行相同,我的结果与预期的一样:

$ 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】:

所有这些麻烦都是我的本地设置造成的。我的 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

【讨论】:

    【解决方案3】:

    我也有同样的问题。对于 1.0 和 -1.0 之间的数字。 sort -n(或-g)不能解决它。我终于把所有的东西都乘了一个大数,排序,然后再除。尽管如此,我还是不明白为什么linux会出现这样的错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2013-03-22
      • 1970-01-01
      相关资源
      最近更新 更多