Последний сортировать по Linux

Я запускаю скрипт (который я не контролирую), чтобы получить следующий вывод. Я хочу сортировать по последней (третьей) колонке. Каждый столбец разделен пробелами, а второй столбец содержит пробелы / символы.

> ./script 37622 (this is || test1)&&(SGD||HKD||RMB) 40010 43944 (this is)&&(SGD||HKD) 102732 79378 (this is||test2)&&(HKD||RMB) 205425 457000 (test2) && (SGD||RMB||HKD||YEN) 71 559658 (test1||test2)&&(RMB||YEN||SGD) 14043 

Я попытался использовать sort -k, но он не работает. Затем я нашел этот вопрос – как численный сортировать по последнему столбцу? – предлагаемое решение

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

Мой вопрос: как я могу использовать это при запуске скрипта?

  > ./script | <something??> 

Спасибо.

Awk

Вы можете адаптировать связанный трубопровод прямым способом:

 $ ./script | awk '{ print $NF,$0 }' | sort -k1,1 -n | cut -f2- -d' ' 

В awk выражение $x ссылается на x-й столбец текущей строки (начиная с 1) – и предопределенная переменная NF хранит количество столбцов текущей строки, таким образом, print $NF,$0 отпечатков для каждой строки последний столбец и полная строка (потому что $0 обозначает полную строку). Команда cut затем выводит второй в последний столбец каждой строки.

-k1,1 сортировки -k1,1 означает, что в качестве ключа сортировки используется только первый столбец – это только имеет значение, когда более чем одна строка имеет одно и то же значение в первом столбце. Без -k1,1 следующие столбцы будут влиять на относительный порядок (как вторичный и так далее сортировочный ключ) в этом случае. С -k1,1 в качестве сортировочного ключа используется только первый столбец, а относительный порядок строк с одним и тем же ключом не изменяется (т. -k1,1 стабильная сортировка).

СЕПГ

В качестве альтернативы вы можете решить ее с помощью sort и sed :

 $ ./script | sed 's/^\(.\+[ \t]\+\)\([0-9]\+ *\)$/\2 \1/' | \ sort -k1,1 -n | sed 's/^\([0-9]\+\) \(.\+\)$/\2 \1/' 

Если новая строка в конце первой строки экранирована через \ – вы можете удалить эту \ и ввести канал в виде одной строки.

Идея состоит в том, чтобы сначала перенести последний столбец на фронт, отсортировать по первому столбцу, а затем снова вернуть его обратно.

Предполагается, что последний столбец разделяется пробелом, т. Е. [ \t]\+ (пробелы или вкладки).

В выражениях sed выполняется обмен данными по группам (например, \2 \1 ) – группы помечены в шаблоне через скошенные скобки: \(...\)