こんにちは。現在のコードは次のとおりです。
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時間ではなく)当日に作成または編集されたログファイルを出力し、ログファイルに「エラー」が含まれているかどうかを検索し、どのログファイルにエラーがあるか、エラーがないかを簡単に示します。エラーはこんな感じです。
名前についていくつかの検閲をしたので、私はめちゃくちゃだとは思わないでください。だからうまくいきません;-)
出力(例):
gBatch_2070.log
gBatch_2071.log
ERROR found on 25.06.2014 in the files obove!
フォルダは次のとおりです。
各ファイルは次のようになります。
私が望む出力:
ファイル名+「ERROR」+エラー後のメッセージ
例:
gBatch_2067.log - エラー**.batch.BatchStart =バッチ完了、gBatch_2077.log - エラー**.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