Odpowiedzi:
Rzuć okiem na stronę podręcznika, aby posortować ...
-n, --numeric-sort compare according to string numerical value
Oto przykład ...
sort -n filename
-g, --general-numeric-sort
może być bardziej wskazane. To dodatkowo umożliwia notację naukową, np. 1.234E10 itp.
Jeśli sortujesz ciągi zawierające tekst i liczby, na przykład nazwy plików dzienników przewijanych, sortowanie sort -n
nie działa zgodnie z oczekiwaniami:
$ 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
W takim przypadku opcja -V
załatwia sprawę :
$ 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
ze strony podręcznika:
-V, --version-sort natural sort of (version) numbers within text
ls
przez sed
przelotki, aby usunąć litery i zostawić tylko cyfry, najwyraźniej kolorowe wyjście również miało wpływ. Więc bieganie ls --color=never
też miało znaczenie.
-V
właśnie tego szukałem. Powinienem mieć w zwyczaju przeglądanie najpierw stron podręcznika.
Cóż, większość innych odpowiedzi tutaj dotyczy
sort -n
Jednak nie jestem pewien, czy to działa w przypadku liczb ujemnych. Oto wyniki, które otrzymuję w wersji sortowania 6.10 w Fedorze 9.
Plik wejściowy:
-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125
Wynik:
-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625
Który oczywiście nie jest uporządkowany według wartości liczbowej.
Wtedy wydaje mi się, że dokładniejszą odpowiedzią byłoby użycie, sort -n
ale tylko wtedy, gdy wszystkie wartości są dodatnie.
PS: Użycie sort -g
zwraca te same wyniki w tym przykładzie
Edytować:
Wygląda na to, że ustawienia regionalne wpływają na to, jak znak minus wpływa na kolejność ( patrz tutaj ). Aby uzyskać prawidłowe wyniki, właśnie zrobiłem:
LC_ALL=C sort -n filename.txt
Musisz użyć opcji sortowania numerycznego:
sort -n -k 1,1 File.txt
Użyj sort -n
lub sort --numeric-sort
.
Użyj sort -nr do sortowania w porządku malejącym. Odnosić się
Więcej informacji można znaleźć na powyższej stronie podręcznika
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