Це, найчастіше, найпоширеніший спосіб пошуку "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".