複数のファイルから複数の文字列を出力する

複数のファイルから複数の文字列を出力する

こんにちは。現在のコードは次のとおりです。

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

関連情報