it-swarm.com.de

Vorkommen von Word in einer Textdatei zählen

Ich habe eine Textdatei mit Tweets und muss zählen, wie oft ein Wort im Tweet erwähnt wird. Zum Beispiel enthält die Datei:

Apple iPhone X is going to worth a fortune
The iPhone X is Apple's latest flagship iPhone. How will it pit against it's competitors?

Angenommen, ich möchte zählen, wie oft das Word iPhone in der Datei erwähnt wird. Also hier ist was ich versucht habe.

cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l

es funktioniert sicherlich, aber ich bin verwirrt über den Befehl 'wc' unter Unix. Was ist der Unterschied, wenn ich etwas versuche wie:

cut -f 1 Tweet_Data | grep -c "iPhone"

wo wird stattdessen -c verwendet? Beide führen zu unterschiedlichen Ergebnissen in einer großen Datei voller Tweets, und ich bin verwirrt darüber, wie es funktioniert. Mit welcher Methode kann das Vorkommen richtig gezählt werden?

34
Maxxx

Bei einer solchen Anforderung würde ich ein GNU grep (für die Option -o ), dann durchlaufe wc, um die Gesamtzahl der Vorkommen zu zählen:

$ grep -o -i iphone Tweet_Data | wc -l
3

Ein einfaches grep -c In den Daten zählt die Anzahl der übereinstimmenden Zeilen und nicht die Gesamtzahl der ) Wörter , die übereinstimmen. Wenn Sie die Option -o Verwenden, wird grep angewiesen, jede Übereinstimmung online auszugeben, unabhängig davon, wie oft sich die Übereinstimmung in der Zeile befindet.

wc -l Weist das Dienstprogramm wc an, die Anzahl der Zeilen zu zählen. Nachdem grep jede Übereinstimmung in eine eigene Zeile gesetzt hat, ist dies die Gesamtzahl der Vorkommen des Wortes in der Eingabe.


Wenn GNU grep nicht verfügbar ist (oder gewünscht ist), können Sie die Eingabe mit tr so transformieren, dass sich jedes Wort in einer eigenen Zeile befindet, und dann grep -c Verwenden. zählen:

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3
58
Jeff Schaller

Die einfachste Methode ist:

grep -wc "your_text" FileName

für dich wird es sein,

grep -wc "iPhone" Tweet_Data
2