Ich habe eine Textdatei mit Tweets und muss zählen, wie oft ein Wort im Tweet erwähnt wird Die Datei enthält beispielsweise:
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 Wort 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“ in Unix. Was ist der Unterschied Wenn ich etwas versuche wie:
cut -f 1 Tweet_Data | grep -c "iPhone"
wobei stattdessen -c verwendet wird? Beide führen zu unterschiedlichen Ergebnissen in einer großen Datei voller Tweets, und ich bin verwirrt wie es funktioniert. Auf welche Methode wird das Auftreten richtig gezählt?
Kommentare
-
cut -f1
basiert auf dem Schneiden Registerkarten, die ' hier nicht viel bewirken. Sind Sie sicher, dasswc -l
Ihnen wirklich die richtige Anzahl gibt? Hier würden 2 angezeigt, aber ich zähle 3 Instanzen von " iPhone ". - Eine andere Technik: unix.stackexchange.com/q/39039/117549
- Ebenfalls ähnlich: unix.stackexchange .com / q / 60727/117549
Antwort
Bei einer solchen Anforderung würde ich Verwenden Sie ein GNU-Grep (für die Option -o
) und führen Sie es dann durch wc
, um die Gesamtzahl der Vorkommen zu zählen:
$ grep -o -i iphone Tweet_Data | wc -l 3
Einfach grep -c
In den Daten wird die Anzahl der übereinstimmenden Zeilen gezählt, nicht die Gesamtzahl der übereinstimmenden Wörter . Mit der Option -o
wird grep angewiesen, jede Übereinstimmung in einer eigenen Zeile auszugeben, unabhängig davon, wie oft die Übereinstimmung in der ursprünglichen Zeile gefunden wurde.
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 (oder gewünscht) ist, können Sie das transformieren Geben Sie mit tr
ein, sodass jedes Wort in einer eigenen Zeile steht. Verwenden Sie dann grep -c
, um zu zählen:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Antwort
Die einfachste Methode ist
grep -wc "your_text" FileName
für Sie wird es sein,
grep -wc "iPhone" Tweet_Data
Kommentare
- Sehr saubere Antwort jedoch, wenn Sie stimmen mit einem Wort wie ' cool überein ' Sie stimmen nur mit cool und NICHT ccooll überein. Beachten Sie also, dass Leerzeichen um das Wort herum wichtig sind. li>
- Das Ergebnis ist falsch, wenn das Wort mehr als einmal in einer Zeile vorkommt.