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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *