Як числити сортування за останнім стовпцем?


23

У мене є цей вхід:

sdkxyosl 1
safkls 2
asdf--asdfasxy_asd 5
dkd8k  jasd 29
sdi44sw 43
asasd afsdfs 10
rklyasd 4

Мені потрібен цей вихід:

sdi44sw 43
dkd8k  jasd 29
asasd afsdfs 10
asdf--asdfasxy_asd 5
rklyasd 4
safkls 2
sdkxyosl 1

Тому мені потрібно сортувати рядки за останнім стовпцем.

Я не знаю, скільки стовпців в одному рядку.

Я просто не можу зрозуміти, як це зробити. У мене немає "повноважень". У мене просто ~ середні можливості сценаріїв з sed, awk, cut тощо.

Хтось знає, як це зробити?

Відповіді:


34

У наступному командному рядку використовується awkпопереднє поле кожного рядка file.txt, робиться зворотне числове впорядкування, а потім використовується cutдля видалення доданого поля:

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '

omg ... я не знав про $ RS !! дуже тобі дякую!!!!!
LanceBaynes

@forcefsck: Я не думаю, що це можливо тільки sort -k. begfieldФункція в GNU роду просто відраховує до нуля. Здається, ваш підхід прикрасити-сортувати-неприкосновно (DSU) є найкращим способом.
Мікель

З інтересу, чому $NF,$RSі ні $NF,$0? Я не знав $RS, що це робив. (Я думаю, що це рівнозначно $NF,$"\n", що робить те саме, але це теж дивно, я думаю.)
Mikel,

2
@ johnny8888, @forcefsck: На жаль, $може супроводжуватися будь-яким виразом. " Ефект вираження числа поля, що оцінює будь-що, крім невід'ємного цілого числа, не визначений ". GNU awk (у моїй системі) трактує рядок як "\n"нуль. Інші (наприклад, оригінальна реалізація A, W і K) скасовують повідомлення про помилку. Якщо RSтрапилася цифра, ви отримаєте відповідне поле для будь-якої реалізації. Тому не робіть цього, використовуйте $0.
Жил "ТАК - перестань бути злим"

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