Вы можете легко сделать это с помощью встроенных команд.
- Поток содержимого файла
sort
. Нам нужно это для следующего шага.
- Это идет к
uniq -c
. Он будет считать уникальное вхождение каждой строки. Если подобные строки не являются соседними, это не сработало бы без сортировки.
- Затем передайте его другому
sort
, который теперь сортируется в обратном порядке (r
) и основан на числовой (n
) интерпретации вывода uniq
. Нам нужна числовая опция, так как в противном случае пробел перед числами приведет к неверным результатам (подробнее см. Справку по sort
GNU).
- Наконец, показывают только первые двенадцать строк с
head
.
Команда будет тогда:
sort test.txt | uniq -c | sort -rn | head -n 12
Вывод здесь содержит фактическое количество вхождений.
Чтобы получить только необработанный список строк, вы можете передать вывод в sed
:
sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'
Пример:
I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Выведите из первой команды, но только выбрав 2 из head
:
6 Hello there!
3 Look at me!
Выход из второй команды:
Hello there!
Look at me!