124 votes

Comment trier un fichier, en fonction de ses valeurs numériques pour un champ ?

Exemple file.txt :

   100 foo
  2 bar
  300 tuu

Lors de l'utilisation de sort -k 1,1 file.txt , l'ordre des lignes ne changera pas, bien que nous nous attendions à :

   2 bar
  100 foo
  300 tuu

Comment trier un champ composé de nombres en fonction de la valeur numérique absolue ?

161voto

Andrew White Points 23508

Jetez un œil à la page de manuel pour trier ...

    -n, --numeric-sort
          compare according to string numerical value

Voici donc un exemple...

 sort -n filename

121voto

TMG Points 1385

Si vous triez des chaînes contenant du texte et des nombres, par exemple des noms de fichiers de journaux évolutifs, 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 l'affaire :

 $ 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

à partir de la page de manuel :

    -V, --version-sort
          natural sort of (version) numbers within text

7voto

Kai Sternad Points 7676

Vous devez utiliser l'option de tri numérique :

 sort -n -k 1,1 File.txt

3voto

Roman Cheplyaka Points 15145

Utilisez sort -n ou sort --numeric-sort .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X