Сортировка в баш - PullRequest
       27

Сортировка в баш

15 голосов
/ 18 августа 2010

Я пытался получить уникальные значения в каждом столбце файла с разделителями табуляции в bash.Итак, я использовал следующую команду.

cut -f <column_number> <filename> | sort | uniq -c

Работает нормально, и я могу получить уникальные значения в столбце и его количество, например

105 Linux
55  MacOS
500 Windows

Вместо того, чтобы сортировать по именам значений столбца (которые в этом примере являются именами ОС) Я хочу отсортировать их по количеству и, возможно, иметь количество во втором столбце в этом формате вывода.Так это должно будет выглядеть так:

Windows 500
MacOS   105
Linux   55

Как мне это сделать?

Ответы [ 3 ]

17 голосов
/ 18 августа 2010

Использование:

cut -f <col_num> <filename>
    | sort 
    | uniq -c
    | sort -r -k1 -n
    | awk '{print $2" "$1}'

sort -r -k1 -n сортируется в обратном порядке, используя первое поле в качестве числового значения.awk просто меняет порядок столбцов.Вы можете проверить добавленные команды конвейера таким образом (с более хорошим форматированием):

pax> echo '105 Linux
55  MacOS
500 Windows' | sort -r -k1 -n | awk '{printf "%-10s %5d\n",$2,$1}'
Windows      500
Linux        105
MacOS         55
2 голосов
/ 18 августа 2010

Mine:

cut -f <column_number> <filename> | sort | uniq -c | awk '{ print $2" "$1}' | sort

Это изменит порядок столбцов (awk), а затем просто отсортирует вывод.

Надеюсь, это поможет вам

0 голосов
/ 19 апреля 2019

Использование sed на основе Tagged RE:

cut -f <column_number> <filename> | sort | uniq -c | sort -r -k1 -n | sed 's/\([0-9]*\)[ ]*\(.*\)/\2 \1/'

Не выводит вывод в чистом формате.

...