Как мне перечислить количество слов в нескольких файлах?

9

Скажем, мне нужно узнать, сколько слов в каждом файле содержат слово «работа».

Я знаю, что найти файлы с «работой» было бы ls work. И выяснить количество слов было быwc -w

Однако я попробовал это, и, похоже, просто отображает количество файлов, а не количество слов, объединенных во всех файлах (которые мне нужны):

ls work | wc -w

Так, скажем, если есть 14 файлов, которые следуют предварительному условию «работа», он будет отображать 14, а не количество слов.

Джон Стейсен
источник

Ответы:

17

Синтаксис есть wc -w [FILE]. Если вы не используете FILE, но труба в выходных данных ls workбудет считать только то, что будет прочитано на stdin.

Вам нужно указать сам текст:

cat *work* | wc -w

Альтернативу можно выполнить wcс find -exec. Но имейте в виду, что это может показать несколько «итоговых» сумм, которые findбудут вызываться wcнесколько раз, если файлов много.

find ./ -type f -name "*work*" -exec wc -w {} +
Germar
источник
Я использовал findкоманду, чтобы также иметь возможность суммировать количество строк с помощью wc -l. Удивительно!
cody.codes
3

Вы можете работать wcс несколькими файлами, а затем использовать встроенную оболочку, *которая добавляет все не скрытые файлы в рабочем каталоге к wcпараметрам.

wc -w *work*
mmrmartin
источник
Если имя каталога содержит, workто это покажет вывод вместе с ошибкой .. хаком будет перенаправить STDERR .. 2>/dev/nullхотя вы должны использовать что-то вроде, findчтобы получить только файлы ..
heemayl