11

この種の入力をどのようにソートしますか?

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

どちらかsort -n dataで、sort -g dataこれを生成します:

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

一方-1.whatever、ゼロの前になります。マイナス記号に気付くにはソートが必要です。ありがとうございました。

4

3 に答える 3

23

これらの問題はすべて、私のローカル設定に影響を与えました。私の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
于 2012-04-05T15:48:41.797 に答える
2

問題は、並べ替えコマンドにある可能性があります。同じを実行すると、結果は期待どおりになります。

$ 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.
于 2012-04-05T15:15:17.233 に答える