Получение комбинированного подсчета всех вхождений строки в несколько каталогов?

У меня есть (надеюсь) интересная проблема, о которой я мог бы посоветовать. У меня есть система, которая по существу используется для хранения журналов. Он имеет структуру каталогов, такую ​​как:

YYYY/MM/DD/hostname/ 

Существует несколько имен хостов, и под каждым из них есть куча gzip почасовых журналов (доступ, ошибка и т. Д.).

Меня интересует общее количество заданной строки в журналах доступа, разбитых по дням и имени хоста. Каков наилучший способ сделать это? Возможно ли это с комбинацией find и grep, или это слишком сложно для этого, и вместо этого нужен сценарий?

2 Solutions collect form web for “Получение комбинированного подсчета всех вхождений строки в несколько каталогов?”

 for d in */*/*/*; do printf '%s: ' "$d" zcat -- "$d/"*.gz | grep -Fc STRING done 

будет подсчитывать количество строк, содержащих STRING.

Замените grep -Fc STRING на grep -Fo STRING | wc -l grep -Fo STRING | wc -l (предположим, что GNU grep ) имеет количество вхождений.

Замените zcat на gzip -dc если ваш zcat не поддерживает файлы .gz .

С помощью zsh и GNU grep вы можете сократить его до:

 for d (*/*/*/*) zcat $d/*.gz | grep -FcH --label=$d STRING 

Если вы хотите сделать это без стандартного анализатора журналов, вы можете сделать это в «одной строке» оболочки из каталога, содержащего ваши YYYY dirs:

 for d in */*/*; do echo -n "$d : " find $d -name *.log | xargs grep -c STRING done 
  • Оптимизация сценария оболочки с длительным циклом работы
  • Поиск текста в файлах, имеющих определенную папку в пути, а затем отображение соответствующих строк и разрешений файлов
  • Как grep для нескольких шаблонов?
  • Проверка скрипта выполняется
  • Как обычные выражения отличаются от подстановочных знаков, используемых для фильтрации файлов
  • как использовать grep для определенных файлов?
  • pipe ls to grep (строки против «элементов»)
  • Как искать одиночные кавычки и двойные кавычки в поиске grep?
  • Удалить комментарии в файле C
  • Команда Grep, которая находит / исключает всю строку, где символ разделителя появляется определенное количество раз?
  • Как сделать GNU grep по умолчанию во FreeBSD?
  • Interesting Posts

    Как включить доступ к Интернету без использования скрипта gui или apple на снежном барсе?

    Индивидуальный ISO не будет устанавливаться из локального кикстарта на установочном компакт-диске

    В VI, как я вставляю текст в свой файл из ряда строк, которые я дернул?

    установить IP-адрес виртуальной машины каждый раз, начиная с DHCP на CentOS 5.6

    Должны ли / etc / hosts содержать имя домена или полное доменное имя?

    Как настроить SSH на рабочем столе Ubuntu и связать с ним поддомен для удаленного доступа к внешней сети?

    Как создать имя файла для моего приложения электронной почты?

    grep для текста, который может или не может присутствовать

    Рассчитать время отклика Apache за последние 10 секунд

    как определить, сколько раз pid_max завернут?

    Будет ли tar -cvzf packed.tar.gz mydir учитывать скрытые файлы?

    Как настроить распределение пропускной способности между группами?

    linux (ubuntu) графический вход с удаленного компьютера до того, как сеанс войдет в систему

    Настройка LD_LIBRARY_PATH

    Заменяйте каждую вкладку ТОЛЬКО в начале каждой строки пробелами

    Linux и Unix - лучшая ОС в мире.