Це, найчастіше, найпоширеніший спосіб пошуку "N найпоширеніших речей", за винятком того, що ви пропущені sort, і у вас виграшно cat:
tr -c '[:alnum:]' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head -10
Якщо ви не ставите sortперед цим, uniq -c ви, ймовірно, отримаєте багато помилкових однотонних слів. uniqтільки унікальні прогони ліній, а не загальна унікальність.
EDIT: Я забув трюк, "стоп слова". Якщо ви дивитесь англійський текст (вибачте, тут є одномовна північноамериканська мова), такі слова, як "з", "і", "," майже завжди займають перші два-три місця. Ви, мабуть, хочете їх усунути. У дистрибутиві 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
Я здогадуюсь, що більшості людських мов потрібні подібні «слова зупинки», вилучені із значущих підрахунків частот слів, але я не знаю, де запропонувати отримати списки списків інших зупинок інших мов.
EDIT: fgrep повинен використовувати -wкоманду, яка дозволяє зіставити цілі слова. Це дозволяє уникнути помилкових позитивних слів на словах, які містять лише короткі зупинки, наприклад "a" або "i".