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.
cut -f1
bygger på flikar, som inte ' t gör mycket här. Är du säker på attwc -l
verkligen ger dig rätt räkning? Det skulle visa 2 här, men jag räknar tre instanser av " iPhone ".