В течение более быстрого времени кодирования Это - то, что я пробую успешно прямо сейчас:
printf '%s\n' $(cat *.txt) | sort | uniq -c | sort -gr | less
Запись его в C будет, скорее всего, иметь быстрое время выполнения, но занимает больше времени записать. Хороший компромисс мог бы быть должен использовать awk:
tally.awk
FNR == NR { pat[$1] = 1; next }
{
for(p in pat)
if(index($0, p))
pat[p]++
}
END {
for(p in pat)
print pat[p]-1, p
}
Это будет сначала читать, одним словом, список (одно слово на строку), затем считать соответствия найденными в остальной части входа. Выполните его как это:
cat *.txt | awk -f tally.awk wordlist - | sort -nr
Вышеупомянутое будет соответствовать подстрокам также, если Вы только захотите распознать целые слова, заменить index
строка с:
if(match($0, "\\<" p "\\>"))
Вы могли сделать (с GNU grep):
grep -hEo "[[:alnum:]_'-]+" ./*.txt | sort | uniq -c | sort -rn
Изменение [:alnum:]_'-
выше к тому, что должно быть составляющими слова.
printf
сtr
:cat *.txt | tr '[:punct:]' ' '
. Можно также хотеть сделать соответствие нечувствительным к регистру:tr 'A-Z' 'a-z'
. – Thor 21.01.2013, 21:28