Подсчет строк с сохранением заголовка

Моя обычная идиома для подсчета количества вхождений данной строки в некоторый ввод текста - это

… | sort | uniq -c | sort -n

с последним sort -n , необязательно используемым для сортировки строк по количеству вхождений. Однако недавно я столкнулся с ситуацией, когда первые три строки данных были заголовком, и их включение при сортировке и подсчете значительно ухудшало читаемость.

Какой самый элегантный способ просто сделать отступ в первых трех строках ввода (чтобы учесть поле счетчика), но не отсортировать их?

0
31.07.2017, 16:17
1 ответ

На момент написания этого вопроса моим лучшим решением было это:

… | { for i in 1 2 3; do read -r i; printf '        %s\n' "$i"; done;
      sort | uniq -c | sort -n; }

Таким образом, вывод направляется в группу, которая читает три строки и печатает их с отступом в 8 пробелов (, что представляет собой объем пространства, используемого uniq -cдля хранения количества строк и разделительного пробела ), затем оставшаяся часть ввода этой группы перенаправляется на sortи uniq.

Думаю, я мог бы написать вышеописанное как сценарий оболочки где-нибудь, возможно, с числом строк в качестве аргумента, чтобы мне не приходилось -вводить его повторно для каждого такого использования.

0
28.01.2020, 04:42

Теги

Похожие вопросы