Exemple: contenu de File.txt:
100 foo
2 bar
300 tuu
En utilisant 'sort -k 1,1 File.txt', l'ordre des lignes ne changera pas, bien que nous attendions:
2 bar
100 foo
300 tuu
Comment pouvons-nous trier un champ composé de nombres en fonction de la valeur absolue numérique?
Jetez un coup d’œil à la page page de manuel pour le tri ...
-n, --numeric-sort compare according to string numerical value
Donc, voici un exemple ...
sort -n filename
Si vous triez des chaînes composées de texte et de chiffres, par exemple des noms de fichiers de roulement de journaux, effectuez le tri avec sort -n
ne fonctionne pas comme prévu:
$ ls |sort -n
output.log.1
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.2
output.log.20
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
Dans ce cas, l'option -V
fait le tour:
$ ls |sort -V
output.log.1
output.log.2
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.20
depuis la page de manuel:
-V, --version-sort natural sort of (version) numbers within text
Eh bien, la plupart des autres réponses ici se réfèrent à
sort -n
Cependant, je ne suis pas sûr que cela fonctionne pour les nombres négatifs. Voici les résultats obtenus avec la version 6.10 de tri sur Fedora 9.
Fichier d'entrée:
-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125
Sortie:
-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625
Ce qui n'est évidemment pas ordonné par valeur numérique.
Ensuite, je suppose qu’une réponse plus précise consisterait à utiliser sort -n
mais seulement si toutes les valeurs sont positives.
P.S .: Utilisation de sort -g
renvoie exactement les mêmes résultats pour cet exemple
Modifier:
On dirait que les paramètres régionaux affectent la façon dont le signe moins affecte l'ordre ( voir ici ). Afin d'obtenir de bons résultats, je viens de faire:
LC_ALL=C sort -n filename.txt
Vous devez utiliser l'option de tri numérique:
sort -n -k 1,1 File.txt
Utilisation sort -n
ou sort --numeric-sort
.
Vous devez faire la commande suivante:
sort -n -k1 filename
Ça devrait le faire :)