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.

John Stacen
la source

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 {} +
Germar
la source
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*
mmrmartin
la source
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