Сортировка в bash

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

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

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

105 Linux
55  MacOS
500 Windows

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

Windows 500
MacOS   105
Linux   55

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

17
задан sfactor 18 August 2010 в 08:35
поделиться

2 ответа

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

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
18
ответ дан 30 November 2019 в 13:45
поделиться

Мой:

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

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

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

2
ответ дан 30 November 2019 в 13:45
поделиться