Mam plik tekstowy zawierający tweety i muszę policzyć, ile razy dane słowo zostało 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?
I powiedzmy, że chcę policzyć, ile razy słowo iPhone występuje w pliku. Oto „to, co próbowałem”.
cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l
z pewnością działa, ale nie mam pojęcia co do polecenia „wc” w systemie unix. Jaka jest różnica jeśli spróbuję czegoś takiego:
cut -f 1 Tweet_Data | grep -c "iPhone"
gdzie zamiast tego jest używane -c? Oba te sposoby 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 zliczania wystąpienia?
Komentarze
Answer
Biorąc pod uwagę taki wymóg, użyj GNU grep (dla opcji -o
), następnie przepuść ją przez wc
, aby policzyć całkowitą liczbę wystąpień:
$ grep -o -i iphone Tweet_Data | wc -l 3
Zwykły grep -c
w danych będzie liczyć liczbę pasujących wierszy , a nie łączną liczbę pasujących słów . Użycie opcji -o
nakazuje grepowi umieszczenie każdego dopasowania w osobnym wierszu, niezależnie od tego, ile razy dopasowanie zostało znalezione w oryginalnej linii.
wc -l
mówi narzędziu wc
, aby policzył liczbę wierszy. Po tym, jak grep umieści każde dopasowanie w osobnym wierszu, jest to całkowita liczba wystąpień słowa w wejściu.
Jeśli GNU grep jest niedostępny (lub pożądany), można przekształcić wpisz tr
, aby każde słowo znajdowało się w osobnym wierszu, a następnie użyj grep -c
, aby policzyć:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Odpowiedź
Najłatwiejszą metodą jest
grep -wc "your_text" FileName
dla Ciebie będzie,
grep -wc "iPhone" Tweet_Data
Komentarze
- Bardzo wyraźna odpowiedź, jeśli jednak pasują do słowa takiego jak ' cool ' dopasujesz tylko słowo cool, a NIE ccooll, więc pamiętaj, że spacje wokół słowa mają znaczenie.
- Wynik będzie nieprawidłowy, jeśli słowo występuje więcej niż raz w wierszu.
cut -f1
wycina na podstawie tabs, co nie ' nie robi tutaj zbyt wiele. Czy na pewnowc -l
naprawdę podaje prawidłową liczbę? Pokazałoby tutaj 2, ale liczę 3 wystąpienia " iPhonea ".