Если одной строкой, то получается вот так.
cat words.txt| sed s/" "/"\n"/g|sort|sed 's/[[:upper:]]/\l&/g'|sed s/[^a-zа-я-]//g|uniq -c -d| sort -n| awk 'length($2) > 4'|tail -n 1000| sort -n -r
В words.txt содержатся тексты. Вообще, конечно, можно вместо words.txt использовать *.txt для чтения всех txt-файлов в текущей директории, или dir/*.txt для чтения всех txt в директории dir.
Далее потоковый текстовый редактор sed делает перенос каждого слова на новую строку, чтобы можно было составить сам словарь.
Затем происходит сортировка данных, весь текст приводится к нижнему регистру и вырезаются все знаки пунктуации - таким образом становится довольно легко узнать, какие же слова все-таки повторяются.
После этого за работу берется программа uniq, выбирающая из данных только повторяющиеся слова и пишущая количество повторов.
Далее снова происходит сортировка данных, но на этот раз уже по частоте встречаемости, которую как раз подсчитала uniq.
Затем awk'ом вырезаются все слова, длинна которых составляет менее 4 символов, так как обычно это слова вроде «да, нет, как, и, или» и т.п. Учитывать подобные слова в частотном словаре бессмысленно.
В завершающей стадии работы этого однострочного скрипта командой tail выводятся только топ-1000 слов, а sort зеркально разворачивает список, чтобы самые популярные слова были написаны сверху.
Вот и все. Если в вашей командной строке нет проблем с русской локалью, то приведенный выше скрипт сработает как здесь и описано :) Но в случае, если какие-то проблемы все-таки есть, то можно использовать вот такой вариант скрипта:
cat words.txt| sed s/" "/"\n"/g|sort| sed s/"[[:punct:]]"//g|uniq -c -d| sort -n| awk 'length($2) > 4'|tail -n 20| sort -n -r
Как видно, этот вариант отличается лишь тем, что вместо выдергивания всех символов кроме знаков пунктуации, вырезаются непосредственно знаки пунктуации, а сами буквы остаются нетронутыми. По сути все тоже самое, только не происходит переход в нижний регистр, что делает этот вариант менее приемлемым.
В заключении - скрипт:
- frw.sh
#!/bin/sh
URL="intel-ussur.ru"
MAXWORD=100
w3m -dump -T text/html ${URL} | \
sed s/" "/"\n"/g | \
sort | \
sed 's/[[:upper:]]/\l&/g' | \
sed s/[^a-zа-я-]//g | \
uniq -c -d | \
sort -n | \
awk 'length($2) > 4' | \
tail -n ${MAXWORD} | \
sort -n -r