Wie liste ich die Wortzahl in mehreren Dateien auf?

9

Angenommen, ich muss herausfinden, wie viele Wörter in jeder Datei das Wort "Arbeit" enthält.

Ich weiß, dass es wäre, Dateien mit 'Arbeit' darin zu finden ls work. Und um die Anzahl der Wörter herauszufinden, wäre eswc -w

Ich habe es jedoch versucht und es scheint nur die Anzahl der Dateien anzuzeigen, nicht die Anzahl der Wörter, die in allen Dateien zusammengefasst sind (die ich benötige):

ls work | wc -w

Sagen wir also, wenn es 14 Dateien gibt, die der 'Arbeits'-Voraussetzung folgen, werden 14 angezeigt, nicht die Anzahl der Wörter.

John Stacen
quelle

Antworten:

17

Die Syntax lautet wc -w [FILE]. Wenn Sie nicht FILE verwenden, sondern Pipe in der Ausgabe ls work, zählt nur das, was auf stdin gelesen wird.

Sie müssen den Text selbst einfügen:

cat *work* | wc -w

Alternative, wcmit der Sie ausführen könnten find -exec. Beachten Sie jedoch, dass dies mehrere "Gesamtsummen" anzeigen kann, die bei vielen Dateien mehrmals findaufgerufen wcwerden.

find ./ -type f -name "*work*" -exec wc -w {} +
Germar
quelle
Ich habe den findBefehl verwendet, um auch die Anzahl der Zeilen mit verwenden zu können wc -l. Tolle!
cody.codes
2

Sie können wcmit mehreren Dateien ausgeführt werden und dann die integrierte Shell verwenden, *die alle nicht versteckten Dateien im Arbeitsverzeichnis zu wcden Parametern hinzufügt .

wc -w *work*
mmrmartin
quelle
Wenn der Name eines Verzeichnisses enthält, workwird die Ausgabe zusammen mit einem Fehler angezeigt. Ein Hack besteht darin, den STDERR 2>/dev/nullumzuleiten. Sie sollten jedoch so etwas wie verwenden find, um nur die Dateien
abzurufen