Вывод нескольких строк из нескольких файлов

Вывод нескольких строк из нескольких файлов

Привет, мой текущий код:

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gBatch_*"\
 -daystart -mtime -1 -exec grep -rl "ERROR" "{}" +  | xargs -l  basename

if [ $? -eq 0 ]; then
    tday="$(date +'%d.%m.%Y')"
    echo "ERROR found on $tday in the files obove!"

else
    tday="$(date +'%d.%m.%Y')"
    echo "No ERROR was found at the $tday !"
fi

В настоящее время код выводит файлы журналов, которые были созданы или отредактированы в этот день (а не за последние 24 часа), и ищет файлы журналов, содержат ли они слово «ERROR», и просто сообщает, в каких файлах журналов есть ошибка, или, если ошибок нет, сообщает и это.

Я немного отцензурировал имена, так что не думайте, что я что-то напутал и поэтому это не работает ;-)

Вывод(пример):

gBatch_2070.log
gBatch_2071.log
ERROR found on 25.06.2014 in the files obove!

Папка выглядит так:

папка

Каждый файл выглядит так:

файл

Мой желаемый результат:

Имя файла + «ERROR» + сообщение после ошибки

Пример:

gBatch_2067.log - ERROR **.batch.BatchStart = Пакетная обработка завершена, gBatch_2077.log - ERROR **.batch.BatchStart = Пакетная обработка завершена, ...

Заранее спасибо за вашу помощь!

решение1

Вот что вам следует искать:

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gBatch_*" -daystart -mtime -1 \
-exec grep -H "ERROR" {} \; | sed -e 's/.*\/gBatch_/gBatch_/g' -e 's/:[^E]*/: /g' | tr '\n' ', '

Пример вывода:

gBatch_2070.log:ERROR **.batch.BatchStart = Batchverarbeitung beeendet, gBatch_2077.log - ERROR **.batch.BatchStart = Batchverarbeitung beeendet
gBatch_2070.log:ERROR **.batch.BatchStart = Batchverarbeitung beeendet, gBatch_2077.log - ERROR **.batch.BatchStart = Batchverarbeitung beeendet
gBatch_2071.log:ERROR **.batch.BatchStart = Batchverarbeitung beeendet, gBatch_2077.log - ERROR **.batch.BatchStart = Batchverarbeitung beeendet
...

Объяснение:

  • -Hзаставляет grep также выводить имя файла
  • sed 's/.*\/gBatch_/gBatch_/g'сделать имя файла базовым именем файла

решение2

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gBatch_*"\
 -daystart -mtime -1 -exec grep -rl "ERROR" "{}" +  | xargs -l  basename\
 > /tmp/files_found

if [ $? -eq 0 ]; then
    tday="$(date +'%d.%m.%Y')"

    while read line
    do
       error=`grep "ERROR" /home/user/logfilesError/$line`
       error=`echo $error | sed 's/^.*ERROR/ERROR/' | tr '\n' ', '`
       echo "$line - $error"
    done < /tmp/files_found

    echo "ERROR found on $tday in the files obove!"
    rm /tmp/files_found

else
    tday="$(date +'%d.%m.%Y')"
    echo "No ERROR was found at the $tday !"
fi

Связанный контент