Получить наиболее часто встречающиеся строки из файла в Linux

Получить наиболее часто встречающиеся строки из файла в Linux

У меня есть текстовый файл, в котором на каждой строке есть разные слова.
Как мне найти 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

Связанный контент