Zliczanie wystąpień słowa w pliku tekstowym


31

Mam plik tekstowy zawierający tweety i muszę policzyć, ile razy słowo jest wspomniane w tweecie. Na przykład plik zawiera:

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?

Powiedzmy, że chcę policzyć, ile razy w pliku wspomniane jest słowo iPhone. Oto co próbowałem.

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

to z pewnością działa, ale jestem zdezorientowany co do polecenia „wc” w unixie. Jaka jest różnica, jeśli spróbuję:

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

gdzie zamiast tego używane jest -c? Oba dają różne wyniki w dużym pliku pełnym tweetów i jestem zdezorientowany, jak to działa. Która metoda jest prawidłowym sposobem liczenia zdarzenia?


cut -f1tnie na kartach, co niewiele tu robi. Czy na pewno wc -ldaje to prawidłową liczbę? Pokazuje tutaj 2, ale liczę 3 wystąpienia „iPhone'a”.
Jeff Schaller


Odpowiedzi:


54

Biorąc pod uwagę taki wymóg, użyłbym GNU grep (dla -oopcji ), a następnie przekazałem go, wcaby policzyć całkowitą liczbę wystąpień:

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

Zwykły grep -cw danych policzy liczbę pasujących wierszy , a nie całkowitą liczbę pasujących słów . Użycie tej -oopcji powoduje, że grep wypisuje każde dopasowanie w linii on-line, bez względu na to, ile razy dopasowanie jest w linii.

wc -lnakazuje wcnarzędziu policzyć liczbę linii. Po wstawieniu przez grep każdego dopasowania do osobnego wiersza, jest to całkowita liczba wystąpień słowa na wejściu.


Jeśli GNU grep nie jest dostępny (lub pożądany), możesz przekształcić dane wejściowe trtak, aby każde słowo znajdowało się w osobnej linii, a następnie użyj, grep -caby policzyć:

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

1

Najłatwiejszą metodą jest

grep -wc "your_text" FileName

dla ciebie to będzie,

grep -wc "iPhone" Tweet_Data

Bardzo czysta odpowiedź, jeśli dopasujesz słowo takie jak „fajne”, dopasujesz tylko fajne, a NIE ccooll, więc pamiętaj, że spacje wokół słowa mają znaczenie.
jasonleonhard

1
Wynik będzie niepoprawny, gdy słowo pojawi się więcej niż jeden raz w linii.
hek2mgl
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.