Réponses:
Jetez un œil à la page de manuel pour le tri ...
-n, --numeric-sort compare according to string numerical value
Voici donc un exemple ...
sort -n filename
-g, --general-numeric-sort
pourrait être plus recommandée. Cela permet en outre la notation scientifique par exemple 1.234E10 etc.
Si vous triez des chaînes contenant du texte et des nombres, par exemple des noms de fichiers de journaux de roulement, 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
ls
passe les sed
substitutions pour supprimer les lettres et ne laisser que des chiffres, apparemment, la sortie colorée affectait également les choses. Donc courir a ls --color=never
aussi fait une différence.
-V
c'est exactement ce que je cherchais. Je devrais prendre l'habitude de parcourir d'abord les pages de manuel.
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 que j'obtiens avec la version 6.10 de tri sur Fedora 9.
Fichier d'entrée:
-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125
Production:
-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 serait d'utiliser sort -n
mais uniquement si toutes les valeurs sont positives.
PS: utilisation sort -g
renvoie exactement les mêmes résultats pour cet exemple
Éditer:
On dirait que les paramètres régionaux affectent la façon dont le signe moins affecte l'ordre ( voir ici ). Afin d'obtenir des résultats corrects, 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
Utilisez sort -n
ou sort --numeric-sort
.
Utilisez sort -nr pour trier par ordre décroissant. Référer
Reportez-vous à la page de manuel ci-dessus pour plus d'informations.
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