Всем привет.
Осваиваю потихоньку скрипты и возникла задача проанализировать лог файлы. Каждый день планировщик запускает несколько программ каждая из которых записывает свой лог. Логи по всем программам хранятся в одной папке с именем дня создания:
/mydir/logs/ordered/jobs/2013-10-15 00-15-12/
Если есть ошибки то они имеют формат ERROR:
Первая проблема это как распределить какие ошибки к какому файлу принадлежат?
Например если выполним команду:
find /mydir/logs/ordered/jobs/2013-10-15* -name *.log -print -exec grep ERROR: {} \;
То получу строки ошибок со всех файлов. Мне для начала было бы хорошо получать на выходе в каком файле какие ошибки. Не подскажите идею реализации?
Пользователь решил продолжить мысль 15 Октября 2013, 17:22:23:
Поправка вопроса. Для начала мне нужно понять в каких программах случились ошибки для этого мне нужно выделить файлы тех логов которые содержат ERROR:
Пользователь решил продолжить мысль 15 Октября 2013, 23:33:43:
С этой проблемой разобрался, забыл про возможности грепа=)
Но главная задача не решилась дело вот в чем:
Есть программа которая после отработки записывает в лог файл след информацию:
****project = red2
<много много строк инфы>
ERROR:
<много строк инфы>
****project = white6
<много много строк инфы>
****project = Xen
<много строк инфы>
ERROR:
Задача вот в чем если проект не отработал то в логе будет строка начинающая с ERROR: для удобства диагностики самое важное это строчка с именем проекта и строчка с ошибкой которая случилась в нем, причем проект может и отработать без ошибок как в моем примере white6. В идеале если будут на выходе только те проекты где есть ошибки. Но для начала хотелось бы хотя бы фильтровать и на выходе получать строку с проектом и строку с ошибкой. Таких файлов очень много с логами, я пробовал
find /log -name *.log -exec grep -f /home/user/mask {} \;
в маске прописывал шаблоны которые нужно было отгрепать но греп работал как cat. По отдельности можно грепнуть проекты и ошибки но тогда не понятно будет какая ошибка в каком проекте и смысл теряется.
Кто нибудь может дать совет как можно реализовать такую задачу, у меня пока нет идей но активно их ищу=)
Пользователь решил продолжить мысль 16 Октября 2013, 16:28:17:
Всё! Реализовал может кому поможет

#!/bin/bash
DATE_NAMEDIR=`date +%Y-%m-%d`
reportfile=/home/user/scripts/scan_report
find /home/user/scripts/dev/* -type f -name '*.log' -print | while read dir
do
echo "-------------------------------------------------------------------------------"
echo "Job: $dir" >>/home/user/scripts/scan_report
cat *$dir* |awk '{if ($1 ~ /ERROR/) {print; print $0} else if ($3 ~ /Step:/) {print}}'
done
Но это не конец теперь я хочу получить только имя лог файла, причем имена логов содержат проблелы((
Кто нибудь знает как из $dir получить имя файла?