2013-03-14 6 views
5

Angenommen, ich habe Datei text.txt wie folgt:Listen Sie alle Wörter in einer Textdatei mit Häufigkeitszählungen auf?

she likes cats, and he likes cats too.

ich mein Ergebnis aussehen mag:

she 1 
likes 2 
cats 2 
and 1 
he 1 
too 1 

Wenn space , . in sie setzen würde die Skripte einfacher machen, das wäre fein.

Gibt es eine einfache Shell-Pipeline, die dies erreichen könnte?

+0

Wenn der Satz war "Eine meiner Katzen wiegt 500 Pfund, diese Katze ist super groß!" - Ist das eine Zählung von Katze plus eine Zählung von Katzen oder etwas anderes? Gibt es in diesem Satz ein Wort "s"? Gibt es ein Wort "500" und ein Wort "lbs" oder ein Wort "500lbs" oder etwas anderes? Gibt es ein Wort "Super" und ein Wort "Größe" oder ein Wort "Super-Größe"? –

Antwort

18

Hier ist ein Einzeiler Nähe und Liebe zu meinem Herzen:

cat text.txt | sed 's|[,.]||g' | tr ' ' '\n' | sort | uniq -c 

Die sed Streifen Interpunktion (Melodie regex nach Geschmack), setzt die tr die Ergebnisse ein Wort pro Zeile.

+0

Sie sind fantastisch! – JackWM

+1

Dann drücken Sie auf jeden Fall diese Häkchen-Taste. – phs

+0

@phs +1 für gute Einstellung! und Humor. –

0

Mit GNU awk können Sie einfach der Record-Separator (RS) gibt eine beliebige Folge von nicht-alphabetischen Zeichen sein:

$ gawk -v RS='[^[:alpha:]]+' '{sum[$0]++} END{for (word in sum) print word,sum[word]}' file 
she 1 
likes 2 
and 1 
too 1 
he 1 
cats 2 

aber das wird das Problem nicht lösen, wie zu erkennen „Worte“ in Allgemeines.

Verwandte Themen