Это довольно распространенный способ найти «N самых распространенных вещей», за исключением того, что вы пропустили a sort, и у вас есть подарок cat:
tr -c '[:alnum:]' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head -10
Если вы не вставите sortперед этим, uniq -c вы, вероятно, получите много ложных синглтон-слов. uniqделает только уникальные линии, а не уникальность.
РЕДАКТИРОВАТЬ: я забыл трюк, "стоп-слова". Если вы смотрите на текст на английском языке (извините, здесь говорят на одноязычном языке для Северной Америки), такие слова, как "of", "и", "the", почти всегда занимают верхние два или три места. Вы, вероятно, хотите устранить их. В дистрибутиве GNU Groff есть названный файл, eignкоторый содержит довольно приличный список стоп-слов. Мой Arch дистрибутив есть /usr/share/groff/current/eign, но я думаю, что я также видел /usr/share/dict/eignили /usr/dict/eignв старых Unixes.
Вы можете использовать стоп-слова, как это:
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head -10
Я предполагаю, что большинство человеческих языков нуждаются в аналогичных «стоп-словах», удаленных из значимых значений частоты слов, но я не знаю, где предложить другие языки, чтобы остановить список слов.
РЕДАКТИРОВАТЬ: fgrep следует использовать -wкоманду, которая включает сопоставление целых слов. Это позволяет избежать ложных срабатываний в словах, которые просто содержат короткие остановки, такие как «а» или «я».