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

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

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

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 - 오류 **.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
...

설명:

  • -Hgrep이 파일 이름도 인쇄하도록 강제합니다.
  • 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

관련 정보