
Wie kann ich die Anzahl aller Wörter in einer Datei herausfinden?
Ich möchte ein Histogramm jedes Wortes in der Textpipe oder im Dokument. Im Dokument werden neue Zeilen und leere Zeilen vorhanden sein. Ich habe alles außer entfernt [a-zA-Z]
.
> cat doc.txt
word second third
word really
> cat doc.txt | ... # then count occurrences of each word \
# and print in descending order separated by delimiter
word 2
really 1
second 1
third 1
Es muss einigermaßen effizient sein, da die Datei 1 GB großer Text ist und nicht mit exponentieller Zeitlast arbeiten kann.
Antwort1
Versuche dies:
grep -o '\w*' doc.txt | sort | uniq -c | sort -nr
-o
Drucken Sie jedes Match anstelle von Matching-Zeilen\w*
Wortzeichen abgleichensort
Sortieren Sie die Übereinstimmungen vor dem Weiterleiten anuniq
.uniq -c
Drucken Sie die eindeutigen Zeilen und die Anzahl der Vorkommen-c
sort -nr
Umgekehrte Sortierung nach Anzahl der Vorkommen.
Ausgabe:
2 word
1 third
1 second
1 really
Alternative:
awk
Für die exakte Ausgabe verwenden Sie :
$ grep -o '\w*' doc.txt \
| awk '{seen[$0]++} END{for(s in seen){print s,seen[s]}}' \
| sort -k2r
word 2
really 1
second 1
third 1
Antwort2
perl -lnE '
$count{$_}++ for /[[:alpha:]]+/g;
END {
say "@$_" for
sort {$b->[1] <=> $a->[1] || $a->[0] cmp $b->[0]}
map {[$_, $count{$_}]}
keys %count
}
' doc.txt
Dies verbraucht viel mehr Speicher als die ursprüngliche Lösung von pLumo.