Comment répertorier le nombre de mots dans plusieurs fichiers?


9

Disons que j'ai besoin de savoir combien de mots dans chaque fichier contiennent le mot «travail».

Je sais que pour y trouver des fichiers contenant du «travail», ce serait ls work. Et pour comprendre le nombre de mots, ce seraitwc -w

Cependant, j'ai essayé cela et il semble simplement afficher le nombre de fichiers, pas le nombre de mots combinés dans tous les fichiers (dont j'ai besoin):

ls work | wc -w

Alors disons que s'il y a 14 fichiers qui suivent le prérequis «travail», il affichera 14, pas le nombre de mots.

Réponses:


17

La syntaxe est wc -w [FILE]. Si vous n'utilisez pas FILE mais pipe dans la sortie de ls workcelui-ci ne comptera que ce qu'il lira sur stdin.

Vous devez canaliser le texte lui-même:

cat *work* | wc -w

Alternative , vous pouvez exécuter wcavec find -exec. Mais sachez que cela pourrait afficher plusieurs sommes "totales" comme cela findsera appelé wcplusieurs fois s'il y a beaucoup de fichiers.

find ./ -type f -name "*work*" -exec wc -w {} +

J'ai utilisé la findcommande pour pouvoir également résumer le nombre de lignes en utilisant wc -l. Incroyable!
cody.codes

3

Vous pouvez exécuter wcplusieurs fichiers, puis utiliser le shell intégré *qui ajoute tous les fichiers non cachés du répertoire de travail aux wcparamètres de.

wc -w *work*

Si le nom d'un répertoire contient, workcela affichera la sortie avec une erreur .. un hack sera de rediriger le STDERR 2>/dev/null.. même si vous devez utiliser quelque chose comme findpour obtenir uniquement les fichiers ..
heemayl
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.