Ermitteln Sie die Anzahl der Vorkommen jedes Wortes im Dokument

Ermitteln Sie die Anzahl der Vorkommen jedes Wortes im Dokument

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
  • -oDrucken Sie jedes Match anstelle von Matching-Zeilen
  • \w*Wortzeichen abgleichen
  • sortSortieren Sie die Übereinstimmungen vor dem Weiterleiten an uniq.
  • uniq -cDrucken Sie die eindeutigen Zeilen und die Anzahl der Vorkommen-c
  • sort -nrUmgekehrte Sortierung nach Anzahl der Vorkommen.

Ausgabe:

  2 word
  1 third
  1 second
  1 really

Alternative:

awkFü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.

verwandte Informationen