11

У меня есть текстовый файл, который имеет различные слова в строке.
Как я могу найти 12 наиболее часто появляющихся строк в файле и отобразить их?
Я не очень хорош с командами сценариев.

Если бы я мог получить команду и объяснение, чтобы я мог понять, как ее использовать и расширить свои знания о командах, это было бы здорово!

2 ответа2

21

Вы можете легко сделать это с помощью встроенных команд.

  • Поток содержимого файла 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .