Intereting Posts
переустановить клиент NFS без перезагрузки Postfix не проверяет адрес «От:» с помощью sender_login_maps Как получить указатель мыши, где находится входной карет? Получить имена SAN Lun Как передать параметры псевдониму? Раскладка клавиатуры изменилась. Как и почему? Инструмент для автоматического извлечения суб-изображений, находящихся внутри изображения: суб-изображения, разделенные пробелами Как измерить изменения в файловой системе, выполненные определенным приложением? Pidstat RSS – несколько строк для одной команды Установка bash SHELL для удаленных соединений openSSH? Является ли мой SSH-ключ сопряжен со мной как с человеком или с моей учетной записью пользователя на одной машине? Как понять ssh-keygen и ssh-copy-id? Визуализатор файла журнала в терминале (UNIX) (повтор записи в журнале) Расширение раздела с использованием LVM Как установить extenion php_intl в centos7?

Самый простой способ подсчета строк, соответствующих определенным шаблонам, включая «0», если строка не найдена?

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

У меня есть файл patterns.in , содержащий нужные строки. Например:

 aaaa bbbb cccc dddd eeee ffff 

Файлы журнала могут выглядеть так:

 asd dfg aaaa aaaa sa sdf dddd dddd dddd dddd ghj bbbb cccc cccc cccc fgg fgh hjk 

Первый (и, возможно, самый очевидный подход) заключается в использовании grep , sort и uniq следующим образом:

 grep -f patterns.in logfile.txt | sort | uniq -c 

что дает следующий результат:

  2 aaaa 1 bbbb 3 cccc 4 dddd 

Это близко к тому, чего я хочу достичь, но мой желаемый результат:

  2 aaaa 1 bbbb 3 cccc 4 dddd 0 eeee 0 ffff 

Таким образом, проблема заключается в следующем: как напечатать '0', если строка из файла pattern.in не сопоставлена? Это нужно сделать простейшим способом, так как все, что у меня есть, это среда cygwin .

как насчет подачи файла шаблона назад в качестве файла данных, чтобы каждый паттерн нашел хотя бы одно совпадение, а затем вычитал один из последнего сообщенного количества для каждого совпадения

 grep -f patterns.in logfile.txt patterns.in | cut -f2 -d':' | sort | uniq -c | awk '{print($1 - 1" "$2)}'