실행하고 개수를 생성하는 선택 쿼리가 있습니다. 예를 들어 다음 레코드가 포함된 텍스트 파일로 답변을 내보냅니다.
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 문에 ;
세미콜론을 추가 해야 합니다. 더 이상 문제가 없으면 제대로 작동할 것입니다. 나는 당신의 스크립트도 개선하지 않을 것입니다.if
then
for
do
스크립트.
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이 아닌 할당이 포함된 경우 다음 주소로 이메일을 보내세요.
- 할당이 있는 모든 행을 필터링합니다. 이것은
grep '='
(또는 좀 더 구체적으로 필요하다면 `grep 'count='를 사용하여) 수행할 수 있습니다. - 단일 0이 있는 행을 삭제합니다. 이는 완전한 단어만 일치시키는
grep -v -w '0'
방법 으로 수행할 수 있습니다 .-w
이 경우에는 일치하지 않습니다10
. - 결과에 따라 조치를 취하세요.
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입니다.