web-dev-qa-db-fra.com

UNIX sorte avec des valeurs exponentielles?

J'ai un fichier CSV avec 7 champs de données. Je veux trier le 7ème champ en ordre numérique inverse (les plus petites valeurs en premier). Le 7ème champ de données ressemble à ceci:

0.498469643137
1
6.98112003175e-10
9.11278069581e-06

J'ai essayé d'utiliser l'outil de tri UNIX comme ceci:

$ sort -t"," -n -k -r 7 <my_file>

Le problème que j'ai est que ce genre ne reconnaît pas la forme exponentielle. Par exemple, sort pense que 6.98112003175e-10 est supérieur à 1. Comment puis-je utiliser sort pour trier une colonne csv tout en reconnaissant la notation scientifique? Merci d'avance pour l'aide.

36
drbunsen

trier avec l'option '-g' devrait faire l'affaire. - L'option g indique 'utiliser une valeur numérique générique' pour le tri

59
Finslicer

Veuillez noter que vos paramètres régionaux peuvent supposer un autre délimiteur: Par exemple, dans la localisation russe ',', un caractère délimite des parties de nombre plutôt que '.'. Dans ce cas, vous devez prendre en compte la variable LANG.

Dans mon cas, LANG était réglé sur ru_RU.KOI8-R et donc sort -g m'a donné un résultat erroné.

6
Pavel Kurochkin

Donc, juste pour donner un exemple à ceux qui ne savent pas comment l'utiliser: au lieu de "-n", vous utilisez "-g". l = 1,0.3,6.01e-10

sort -t$',' -n example.txt 

0.3 1 6.01e-10

sort -t$',' -g example.txt

6.01e-10 0.3 1

0
amc