Сортировка по числовому значению поля в Bash



пример: содержимое файла.txt:



  100 foo
2 bar
300 tuu


при использовании ' sort-k 1,1 File.txt', порядок строк не изменится, хотя мы ожидаем:



  2 bar
100 foo
300 tuu


Как мы можем сортировать поле, состоящее из чисел, основанных на абсолюте численное значение?

866   8  

8 ответов:

взгляните на страница для сортировки...

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

Итак, вот пример...

sort -n filename

если вы сортируете строки, которые являются смешанным текстом и числами, например имена файлов прокатных журналов, то сортировка с sort -n не работает:

$ 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

в этом случае параметр -V не работает:

$ 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

из man page:

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

Ну, большинство других ответов здесь относятся к

sort -n
, Я не уверен, что это работает для отрицательных чисел. Вот результаты, которые я получаю с сортировкой версии 6.10 на Fedora 9.

входной файл:

-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125

выход:

-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625

который, очевидно, не упорядочен по числовому значению.

тогда, я думаю, что более точный ответ будет использовать sort -n но только если все значения положительны.

П. С.: С Помощью sort -g возвращает точно такие же результаты для этого примера

Edit:

похоже, что настройки локали влияют на то, как знак минус влияет на порядок (посмотреть здесь). Для того, чтобы получить правильные результаты, я просто сделал:

LC_ALL=C sort -n filename.txt

вы должны использовать числовой параметр сортировки:

sort -n -k 1,1 File.txt

использовать sort -n или sort --numeric-sort.

вы должны выполнить следующую команду:

sort -n -k1 filename

что нужно делать :)

используйте sort-nr для сортировки в порядке убывания. См.

вроде

обратитесь к приведенной выше справочной странице для получения дополнительной информации

    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

Comments

    Ничего не найдено.