Jak wyświetlić listę słów w wielu plikach?

9

Powiedz, że muszę dowiedzieć się, ile słów w każdym pliku zawiera słowo „praca”.

Wiem, że byłoby znaleźć pliki z „pracą” ls work. I dowiedzieć się, ile to będzie słówwc -w

Jednak próbowałem tego i wydaje się, że wyświetla tylko liczbę plików, a nie liczbę słów połączonych we wszystkich plikach (których potrzebuję):

ls work | wc -w

Powiedzmy więc, że jeśli jest 14 plików spełniających warunek wstępny „praca”, wyświetliby 14, a nie liczbę słów.

John Stacen
źródło

Odpowiedzi:

17

Składnia jest następująca wc -w [FILE]. Jeśli nie użyjesz PLIKU, ale potok na wyjściu ls workbędzie liczyć tylko to, co będzie czytał na standardowym wejściu.

Musisz wstawić potok w samym tekście:

cat *work* | wc -w

Alternatywą można wykonać wcz find -exec. Należy jednak pamiętać, że może to pokazywać wiele „sumarycznych” sum, które findbędą wywoływać wcwiele razy, jeśli jest wiele plików.

find ./ -type f -name "*work*" -exec wc -w {} +
Germar
źródło
Użyłem findpolecenia, aby móc również zsumować liczbę wierszy za pomocą wc -l. Niesamowity!
cody.codes
3

Możesz uruchomić wcwiele plików, a następnie użyć wbudowanej powłoki, *która dodaje parametry do każdego ukrytego pliku w katalogu roboczym wc.

wc -w *work*
mmrmartin
źródło
Jeśli nazwa katalogu zawiera work, wyświetli to wynik wraz z błędem .. hack będzie przekierować STDERR .. 2>/dev/nullchociaż powinieneś użyć czegoś takiego, findaby uzyskać tylko pliki ..
heemayl 18.04.15