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

11

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

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

Джим
источник
stackoverflow.com/questions/16922357/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

21

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

  • Поток содержимого файла 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!
slhck
источник
1
Вы должны отсортировать его перед использованием uniq.
cYrus
@slhck: Спасибо! Один вопрос: sort -rnсортирует в обратном порядке, используя в качестве поля сортировки число рядом с каждой производимой строкой uniq -c? Я думал, k1что будет использовано что-то подобное или что-то подобное
Джим
@ Джим Точно. rинвертирует и nчисленно сортирует по числу, производимому uniq. Что именно вы имеете в виду k1?
Slhck
@slhck: я пытался выяснить эти команды, используя, manи я понял, что синтаксис, использующий -kчто-то, должен использоваться для выбора поля для сортировки
Джим
@cYrus: Какой крайний случай, что сортировка необходима заранее?
Джим
3

Если в вашем дистрибутиве есть logtop

cat your_file | logtop

Если ваш файл постоянно растет, как файл журнала, попробуйте:

tail -f your_log | logtop
Жюльен Палар
источник