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 ?
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
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
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
vous devez utiliser l'option de tri numérique:
sort -n -k 1,1 File.txt
vous devez exécuter la commande suivante:
sort -n -k1 filename
Qui devrait le faire :)
utiliser tri-nr pour le tri par ordre décroissant. Reportez-vous à
reportez-vous au-dessus de la page de manuel pour référence ultérieure
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