
У меня есть текстовый файл, в котором на каждой строке есть разные слова.
Как мне найти 12 наиболее часто встречающихся строк в файле и отобразить их?
Я не очень хорош в командах скриптов.
Если бы я мог получить команду и объяснение, чтобы понять, как ее использовать, и расширить свои знания о командах, было бы здорово!
решение1
Это можно легко сделать с помощью встроенных команд.
- Передайте содержимое файла
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!
решение2
Если в вашем дистрибутиве естьlogtop
cat your_file | logtop
Если ваш файл постоянно растет, как файл журнала, попробуйте:
tail -f your_log | logtop