여러 파일에서 여러 문자열 출력

여러 파일에서 여러 문자열 출력

안녕하세요. 현재 코드는 다음과 같습니다.

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

관련 정보