To prawie najczęstszy sposób na znalezienie „N najczęstszych rzeczy”, z tym wyjątkiem, że brakuje sortCi i masz za darmo cat:
tr -c '[:alnum:]' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head -10
Jeśli nie wpiszesz sortwcześniej uniq -c , prawdopodobnie uzyskasz wiele fałszywych singletonów. uniqrobi tylko unikalne przebiegi linii, a nie ogólną unikalność.
EDYCJA: Zapomniałem sztuczki „stop words”. Jeśli patrzysz na tekst w języku angielskim (przepraszam, jednojęzyczny tutaj w Ameryce Północnej), słowa takie jak „of”, „and”, „the” prawie zawsze zajmują pierwsze dwa lub trzy miejsca. Prawdopodobnie chcesz je wyeliminować. W dystrybucji GNU Groff znajduje się plik o nazwie eign, który zawiera całkiem przyzwoitą listę słów kluczowych. Moja dystrybucja Arch ma /usr/share/groff/current/eign, ale myślę, że widziałem też /usr/share/dict/eignlub /usr/dict/eignw starych Uniksach.
Możesz użyć takich słów zatrzymania:
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head -10
Domyślam się, że większość ludzkich języków potrzebuje podobnych „słów kluczowych” usuniętych z liczącej częstotliwości słów, ale nie wiem, gdzie sugerować, aby uzyskać listy słów kluczowych innych języków.
EDYCJA: fgrep należy użyć -wpolecenia, które umożliwia dopasowanie całego słowa. Pozwala to uniknąć fałszywych trafień w słowach, które zawierają jedynie krótkie zatrzymania, takie jak „a” lub „i”.