Я пытался получить уникальные значения в каждом столбце файла с разделителями табуляции в bash. Поэтому я использовал следующую команду.
cut -f <column_number> <filename> | sort | uniq -c
Она работает нормально, и я могу получить уникальные значения в столбце и их количество, как
105 Linux
55 MacOS
500 Windows
Что я хочу сделать, так это вместо сортировки по именам значений столбцов (которые в этом примере являются именами ОС) я хочу сортировать их по количеству и, возможно, иметь количество во втором столбце в этом формате вывода. Так что это будет выглядеть так:
Windows 500
MacOS 105
Linux 55
Как мне это сделать?
Использование:
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
Мой:
cut -f <column_number> <filename> | sort | uniq -c | awk '{ print $2" "$1}' | sort
Это изменит порядок столбцов (awk), а затем просто отсортирует вывод.
Надеюсь, это поможет вам