Привет, мой текущий код:
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