Отображение результата двух команд grep в bash - PullRequest
1 голос
/ 07 апреля 2020

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

Команда 1: find | grep ".coded" | wc -l | Выходные данные: 4533

Команда 2: find | grep ".read" | wc -l | Вывод: 654

Требуется вывод: 4533 | 654 в одну строку

Есть предложения? Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

С GNU find вы можете использовать -printf для печати того, что вы хотите, например, c для каждого файла, соответствующего .coded и "r" для каждого файла, соответствующего .read, а затем использовать awk, чтобы подсчитать, сколько у вас каждого:

find -type f \
    \( -name '*.coded*' -printf 'c\n' \) \
    -o \
    \( -name '*.read*' -printf 'r\n' \) \
    | awk '{ ++a[$0] } END{ printf "%d | %d\n", a["c"], a["r"] }'

Кстати, ваши шаблоны grep соответствуют Xcoded и Yread или действительно чему-либо за ваш период; если это буквальный период, его нужно экранировать, как в '\.coded' и '\.read'. Кроме того, если ваши имена файлов содержат разрывы строк, ваш счетчик отключен.

2 голосов
/ 07 апреля 2020

С оболочкой bash с использованием process substitution и pr

pr -mts' | ' <(find | grep "\.coded" | wc -l) <(find | grep "\.read" | wc -l)
...