Ik heb een tekstbestand met tweets en ik moet het aantal keren tellen dat een woord in de tweet wordt genoemd Het bestand bevat bijvoorbeeld:
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?
En laten we zeggen dat ik wil tellen hoe vaak het woord iPhone in het bestand wordt genoemd. Dus hier is wat ik heb geprobeerd.
cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l
het werkt zeker, maar ik ben in de war over het “wc” -commando in unix. Wat is het verschil als ik iets probeer als:
cut -f 1 Tweet_Data | grep -c "iPhone"
waar -c in plaats daarvan wordt gebruikt? Beide leveren verschillende resultaten op in een groot bestand vol tweets en ik ben in de war over hoe het werkt. Welke methode is de juiste manier om het voorkomen te tellen?
Reacties
Antwoord
Gegeven een dergelijke vereiste, zou ik gebruik een GNU grep (voor de -o
optie ), en geef deze door wc
om het totale aantal keren te tellen:
$ grep -o -i iphone Tweet_Data | wc -l 3
Gewoon grep -c
op de gegevens telt het aantal regels dat overeenkomt, niet het totale aantal woorden dat overeenkomt. Door de optie -o
te gebruiken, vertelt grep dat elke overeenkomst op zijn eigen regel moet worden weergegeven, ongeacht hoe vaak de overeenkomst in de originele regel is gevonden.
wc -l
vertelt het wc
hulpprogramma om het aantal regels te tellen. Nadat grep elke overeenkomst op een eigen regel heeft geplaatst, is dit het totale aantal keren dat het woord in de invoer voorkomt.
Als GNU grep niet beschikbaar (of gewenst) is, zou je de invoer met tr
zodat elk woord op een eigen regel staat, gebruik dan grep -c
om te tellen:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Antwoord
De eenvoudigste methode is
grep -wc "your_text" FileName
voor jou zal het zijn,
grep -wc "iPhone" Tweet_Data
Reacties
- Zeer duidelijk antwoord echter als je komen overeen met een woord als ' cool ' je komt alleen overeen met cool en NIET ccooll, dus houd er rekening mee dat spaties rond het woord er toe doen.
- Het resultaat zal onjuist zijn als het woord meer dan eens op een regel voorkomt.
cut -f1
is knippen gebaseerd op tabs, wat hier niet ' niet veel doet. Weet u zeker datwc -l
u echt het juiste aantal geeft? Het zou hier 2 laten zien, maar ik tel 3 gevallen van " iPhone ".