텍스트 파일에 생성된 개수가 0이 아닌 경우 메일을 통해 사용자에게 보내는 방법

텍스트 파일에 생성된 개수가 0이 아닌 경우 메일을 통해 사용자에게 보내는 방법

실행하고 개수를 생성하는 선택 쿼리가 있습니다. 예를 들어 다음 레코드가 포함된 텍스트 파일로 답변을 내보냅니다.

Unprocessed record for A Sources
----------------------Unprocessed record count for ABC SOURCE ------------------
abc_count=            0
--------------------Unprocessed record count for CDE Source --------
CDE_count=            0
-----------------------Unprocessed record count for DEF Source -----------------
DEF_count=            0
------------------Unprocessed record count for GHI Source ----------------------
GHI_count=            56

위 소스의 개수가 0이 아닌지 확인하는 Unix 명령을 작성하고 이를 필요한 팀에 메일로 보내고 싶습니다.

이것은 내가 이전에 사용했던 것이지만 작동하지 않습니다.

for CHECK in $(awk '{print $1}' hello | grep count=| cut -d"=" -f1) do
    if [ $(grep $CHECK output.txt | awk '{print $2}') -ne 0 ] then
        echo "$(grep $CHECK output.txt)" | mailx -s "CHECK ABC PROCESS" [email protected]
    fi
done

답변1

before 및 before 문에 ;세미콜론을 추가 해야 합니다. 더 이상 문제가 없으면 제대로 작동할 것입니다. 나는 당신의 스크립트도 개선하지 않을 것입니다.ifthenfordo

스크립트.

for CHECK in $(awk '{print $1}' hello | grep count=| cut -d"=" -f1); do
    if [ $(grep $CHECK output.txt | awk '{print $2}') -ne 0 ]; then
        echo "$(grep $CHECK output.txt)" | mailx -s "CHECK ABC PROCESS" [email protected]
    fi
done

또한, 숫자 값을 얻으려면 cut이와 같은 명령을 사용해야 하지 않나요 ? cut -d"=" -f2루프 외부에서 명령을 실행하고 결과가 나오는지 확인하는 것이 좋습니다.

답변2

[email protected]파일에 0이 아닌 할당이 포함된 경우 다음 주소로 이메일을 보내세요.

  1. 할당이 있는 모든 행을 필터링합니다. 이것은 grep '='(또는 좀 더 구체적으로 필요하다면 `grep 'count='를 사용하여) 수행할 수 있습니다.
  2. 단일 0이 있는 행을 삭제합니다. 이는 완전한 단어만 일치시키는 grep -v -w '0'방법 으로 수행할 수 있습니다 . -w이 경우에는 일치하지 않습니다 10.
  3. 결과에 따라 조치를 취하세요.
if grep '=' output.txt | grep -q -v -w '0'; then
    grep '=' output.txt | grep -v -w '0' | mailx -s "Check this out!" [email protected]
fi

문제의 데이터에 대해 다음이 포함된 이메일이 전송됩니다.

GHI_count=            56

달릴 필요가 없다고 생각되면4개이에 대한 grep :

tmpfile=$(mktemp)
grep '=' output.txt | grep -v -w '0' >"$tmpfile"

if [ -s "$tmpfile" ]; then
    mailx -s "Check this out!" [email protected] <"$tmpfile"
fi

rm -f "$tmpfile"

-s파일이 존재하고 크기가 0보다 크면 테스트는 true입니다.

관련 정보