Tri selon la valeur numérique du champ en Bash

exemple: contenu du fichier.txt:

  100 foo
  2 bar
  300 tuu

lors de l'utilisation du fichier 'sort-k 1,1.txt', l'ordre des lignes ne changera pas, bien que nous nous attendions:

  2 bar
  100 foo
  300 tuu

Comment Pouvons-nous Trier un champ composé de nombres basés sur la valeur absolue numérique ?

83
demandé sur jww 2011-01-31 23:59:37

8 réponses

jetez un oeil à la page de manuel pour trier ...

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

voici Donc un exemple...

sort -n filename
111
répondu Andrew White 2011-01-31 21:02:47

si vous êtes en train de trier des chaînes qui sont des textes et des nombres mélangés, par exemple les noms de fichiers des journaux qui roulent, alors 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

de l'homme page:

   -V, --version-sort
          natural sort of (version) numbers within text
65
répondu TMG 2018-05-07 07:32:14

Eh bien, la plupart des autres réponses ici se référer à

sort -n

cependant, je ne suis pas sûr que cela fonctionne pour les nombres négatifs. Voici les résultats que j'obtiens avec la version 6.10 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

qui n'est évidemment pas ordonné par la valeur numérique.

Alors, je suppose qu'une réponse précise serait d'utiliser sort -n mais seulement si toutes les valeurs sont positives.

P.S.: en utilisant sort -g retourne exactement les mêmes résultats pour cet exemple

Edit:

ressemble aux paramètres locaux qui affectent la façon dont le signe moins affecte l'ordre ( voir ici ). Pour obtenir de bons résultats, je viens de faire:

LC_ALL=C sort -n filename.txt
14
répondu pgilmon 2013-02-12 07:51:48

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

sort -n -k 1,1 File.txt
6
répondu Kai Sternad 2011-01-31 21:02:58

utiliser sort -n ou sort --numeric-sort .

3
répondu Roman Cheplyaka 2011-01-31 21:02:27

vous devez exécuter la commande suivante:

sort -n -k1 filename

Qui devrait le faire :)

1
répondu amc 2016-03-11 22:07:33

utiliser tri-nr pour le tri par ordre décroissant. Reportez-vous à

Trier

reportez-vous au-dessus de la page de manuel pour référence ultérieure

-1
répondu Aarish Ramesh 2015-11-12 11:20:20
    echo " Enter any values to sorting: "
read n
i=0;
t=0;
echo " Enter the n value: "
for(( i=0;i<n;i++ ))
do
read s[$i]
done
for(( i=0;i<n;i++ ))
do
for(( j=i+1;j<n;j++ ))
do
if [ ${s[$i]} -gt ${s[$j]} ]
then
t=${s[$i]}
s[$i]=${s[$j]}
s[$j]=$t
fi
done
done
for(( i=0;i<n;i++ ))
do
echo " ${s[$i]}  "
done
-3
répondu karthik 2015-02-03 05:07:12