Jag har en textfil som innehåller tweets och jag måste räkna antalet gånger ett ord nämns i tweeten Till exempel innehåller filen:

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? 

Och låt oss säga att jag vill räkna hur många gånger ordet iPhone nämns i filen. Så här har jag försökt.

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

det fungerar verkligen men jag är förvirrad över kommandot ”wc” i unix. Vad är skillnaden om jag försöker något som:

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

där -c används istället? Båda dessa ger olika resultat i en stor fil full av tweets och jag är förvirrad om hur det fungerar. Vilken metod är det rätta sättet att räkna förekomsten?

Kommentarer

Svar

Med tanke på ett sådant krav skulle jag använd en GNU grep (för -o alternativet ), sedan skicka det genom wc för att räkna det totala antalet förekomster:

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

Vanligt grep -c på data räknar antalet rader som matchar, inte det totala antalet ord som matchar. Med alternativet -o ber grep att mata ut varje match på sin egen rad, oavsett hur många gånger matchen hittades i den ursprungliga raden.

wc -l säger till wc att räkna antalet rader. När grep sätter varje matchning i sin egen rad är detta det totala antalet förekomster av ordet i inmatningen.


Om GNU grep inte är tillgängligt (eller önskat) kan du förvandla mata in med tr så att varje ord är på sin egen rad, använd sedan grep -c för att räkna:

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

Svar

Enklast metod är,

grep -wc "your_text" FileName 

för dig blir det,

grep -wc "iPhone" Tweet_Data 

Kommentarer

  • Mycket rent svar men om du matchar ett ord som ' cool ' du kommer bara att matcha cool och INTE ccooll så var medveten om att mellanslag runt ordet betyder.
  • Resultatet blir felaktigt när ordet förekommer mer än en gång i en rad.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *