Ich suche einen Befehl, um die Anzahl aller Wörter in einer Datei zu zählen. Zum Beispiel, wenn eine Datei wie folgt ist,
today is a
good day
dann sollte es drucken 5
, da es dort 5
Wörter gibt.
text-processing
wc
Richard
quelle
quelle
wc -w $FILE
?Antworten:
Der Befehl
wc
aka. Wortzählung kann es tun:Beispiel
quelle
wc -w
nicht die gleiche Definition haben wie für GNUgrep -w
. Fürwc
ein Wort ist eine Folge von einem oder mehrere nicht-Leerzeichen ([:space:]
Zeichenklasse im aktuellen locale). Zum Beispielfoo,bar
undfoo bar
(mit einem nicht unterbrechenden Leerzeichen) sind jeweils ein Wort.Ich habe mir dazu NUR die Nummer ausgedacht:
Mir gefällt auch der
wc -w < [file]
AnsatzZum Speichern nur der Wortanzahl in einer Variablen können Sie Folgendes verwenden:
Auf diese Weise können Sie den Dateinamen elegant überspringen.
quelle
wc -w < "$file"
für nur die Nummer.Die bessere Lösung ist die Verwendung von Perl:
@Bernhard
Sie können den Quellcode des
wc
Befehls mit coreutils überprüfen , den ich auf meinem Computersubst.c
teste. Die Datei befindet sich in der Bash 4.2-Quelle.Und
Je größer die Datei ist, desto effizienter ist Perl in Bezug auf
wc
.quelle
wc
~ 14 Sekunden gebraucht, während Perl ~ 5 Sekunden gebraucht hat!split
auf/\s+/
wie eine ist ,split(' ')
außer dass jedes führendes Leerzeichen eine Null erste Feld erzeugt. Dieser Unterschied wird Ihnen ein zusätzliches Wort (die Null erste Feld, das ist) pro Zeile Link . Verwenden Sie(split(" ", $_))
für eine so erstellte Datei etwas anderes:echo -e "unix\n linux" > testfile
Ihr Einzeiler meldet 3 Wörter.wc
wird deutlich schneller, genau wie mitPERLIO=:utf8
,perl
wird deutlich langsamer.Lass uns AWK benutzen!
Dies listet die Häufigkeit jedes Wortes auf, das in der bereitgestellten Datei vorkommt. Ich weiß, es ist nicht das, wonach du gefragt hast, aber es ist besser! Wenn Sie die Vorkommen Ihres Wortes sehen möchten, können Sie dies einfach tun:
Ich habe diese Funktion sogar zu meinen .dot-Dateien hinzugefügt
Quelle: AWK-Station Ruby
quelle
Das
wc
Programm zählt "Wörter", aber dies sind beispielsweise nicht die "Wörter", die viele Leute sehen würden, wenn sie eine Datei untersuchen. Dasvi
Programm verwendet zum Beispiel ein anderes Maß für "Wörter", das sie basierend auf ihren Zeichenklassen abgrenzt, währendwc
einfach durch Leerzeichen getrennte Dinge gezählt werden . Die beiden Maßnahmen können sich radikal unterscheiden. Betrachten Sie dieses Beispiel:vi
sieht drei Wörter ( erste und zweite sowie die sie trenn Komma), währendwc
sieht man (kein Leerzeichen auf dieser Linie ist). Es gibt viele Möglichkeiten, Wörter zu zählen. Einige sind weniger nützlich als andere.Während Perl wäre besser zu schreiben einen Zähler für die vi-Stil Worte geeignet sein, hier ist ein kurzes Beispiel mit
sed
,tr
undwc
(mäßig tragbarer wörtlichen Wagenrücklauf mit^M
):Zählungen vergleichen:
wc
gibt 28.Als Referenz sagt POSIX vi :
quelle