Compter les occurrences de mot dans un fichier texte


31

J'ai un fichier texte contenant des tweets et je dois compter le nombre de fois qu'un mot est mentionné dans le tweet. Par exemple, le fichier contient:

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?

Et disons que je veux compter combien de fois le mot iPhone est mentionné dans le fichier. Voici donc ce que j'ai essayé.

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

cela fonctionne certainement, mais je suis confus à propos de la commande «wc» sous unix. Quelle est la différence si j'essaye quelque chose comme:

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

où -c est utilisé à la place? Ces deux résultats différents dans un grand fichier plein de tweets et je suis confus sur la façon dont cela fonctionne. Quelle méthode est la bonne façon de compter l'occurrence?


cut -f1coupe en fonction des onglets, ce qui ne fait pas grand-chose ici. Êtes-vous sûr que wc -lcela vous donne vraiment le bon nombre? Il en afficherait 2 ici, mais je compte 3 instances de "iPhone".
Jeff Schaller


Réponses:


54

Étant donné une telle exigence, j'utiliserais un grep GNU (pour l' -ooption ), puis le passerais wcpour compter le nombre total d'occurrences:

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

En clair grep -c, les données compteront le nombre de lignes qui correspondent, pas le nombre total de mots qui correspondent. L'utilisation de l' -ooption indique à grep de sortir chaque correspondance sur sa ligne, quel que soit le nombre de fois que la correspondance est sur la ligne.

wc -lindique à l' wcutilitaire de compter le nombre de lignes. Après que grep ait placé chaque correspondance dans sa propre ligne, il s'agit du nombre total d'occurrences du mot dans l'entrée.


Si GNU grep n'est pas disponible (ou souhaité), vous pouvez transformer l'entrée avec trpour que chaque mot soit sur sa propre ligne, puis utilisez grep -cpour compter:

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

1

La méthode la plus simple est,

grep -wc "your_text" FileName

pour toi ce sera,

grep -wc "iPhone" Tweet_Data

Réponse très claire cependant, si vous faites correspondre un mot comme «cool», vous ne ferez que correspondre à cool et non à cocooll, alors sachez que les espaces autour du mot comptent.
jasonleonhard

1
Le résultat sera incorrect lorsque le mot apparaît plus d'une fois sur une ligne.
hek2mgl
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.