Як сортувати файл, виходячи з його числових значень для поля?


114

Приклад file.txt:

  100 foo
  2 bar
  300 tuu

Під час використання sort -k 1,1 file.txtпорядок рядків не зміниться, хоча ми очікуємо:

  2 bar
  100 foo
  300 tuu

Як сортувати поле, що складається з чисел на основі абсолютного числового значення?

Відповіді:


149

Погляньте на сторінку чоловіка для сортування ...

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

Тож ось приклад ...

sort -n filename

1
Дякую всім, люди! Це підключено, тому що я кілька разів переглядав його сторінку людини назад і назад, і не бачив цього варіанту. Ах, я був на сторінці спрощеного чоловіка. Чорт!
lukmac

1
Зверніть увагу, що для плаваючих точок використання -g, --general-numeric-sortможе бути більш доцільним. Це також дозволяє наукові позначення, наприклад, 1.234E10 тощо
Herpes Free Engineer

103

Якщо ви сортуєте рядки зі змішаним текстом та цифрами, наприклад, назви файлів журналів, які прокатуються, то сортування з 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

зі сторінки чоловіка:

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

1
Це мене спалохало, тож дякую! Інша справа , що зіпсував мене, по крайней мере , на моєму Cygwin, що навіть тоді , коли пекуче lsчерез sedзаміни , щоб видалити літери і залишити тільки цифри, по- видимому , пофарбована вихід впливала речі , як добре. Тож біг ls --color=neverтакож змінив значення.
Макс Старкенбург

Дивовижне -V- саме те, що я шукав. Мені варто сформувати звичку переглядати сторінки чоловіка.
srowley

18

Ну, більшість інших відповідей тут стосуються

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але тільки якщо всі значення позитивні.

PS: Використання sort -gповертає ті самі результати для цього прикладу

Редагувати:

Схоже, параметри локалі впливають на те, як знак мінус впливає на порядок ( див. Тут ). Для того, щоб отримати належні результати, я просто зробив:

LC_ALL=C sort -n filename.txt



1

Ви повинні виконати таку команду:

sort -n -k1 filename

Це повинно це робити :)


-1

Використовуйте sort -nr для сортування у порядку зменшення. Зверніться

Сортувати

Перегляньте вищевказану сторінку Man для подальшого ознайомлення


-4
    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

1
Потрібно додати в текст трохи пояснення про те, що робить цей код?
Stedy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.