Tous ces problèmes ont fait mes paramètres locaux. Mon ubuntu est en tchèque :
$ echo $LANG
cs_CZ.UTF-8
Dans ce contexte local, ce n'est pas un point décimal, mais plutôt une virgule décimale qui sépare l'entier du reste (comme on le pensait dans les cours de mathématiques, dans notre langue, nous écrivons vraiment une virgule au lieu d'un point).
Par conséquent :
echo '0,03 >> 0,4 >
> -0,3 >
> 0' | sort -n
> 0
> -0,3 >
> 0,4 >
0,03 >
Si vous écrivez un script bash, configurez la routine de tri pour qu'elle utilise les paramètres "normaux".
export LC_ALL=C
Le problème peut être dans votre commande de tri. Si j'exécute la même chose, mon résultat est celui attendu :
$ 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
Vous devriez utiliser le tri GNU si vous ne l'utilisez pas
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.