Вы можете легко сделать это с помощью встроенных команд.
- Поток содержимого файла
sort
. Нам нужно это для следующего шага.
- Это идет к
uniq -c
. Он будет считать уникальное вхождение каждой строки. Если подобные строки не являются соседними, это не сработало бы без сортировки.
- Затем передайте его другому
sort
, который теперь сортируется в обратном порядке ( r
) и основан на числовой ( n
) интерпретации uniq
выходных данных. Нам нужен числовой параметр , так как в противном случае, пространство перед числами приведет к неправильным результатам (см GNU sort
помощи «s для более).
- Наконец, покажите только первые двенадцать строк с
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!