다음의 작은 awk 스크립트를 사용하여 이메일 알림을 받습니다. 그런데 이 메일을 받고 싶어요오직$1
100보다 크거나 같은 경우 .
if 문은 어디에 배치해야 합니까? 나는 성공하지 못한 채 많은 버전을 시도했습니다. 내 스크립트를 따르십시오.
awk '
BEGIN{print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]"}
END{printf("%s\015\n", $1" | "$2)}
' /home/web0/html/tools/uptime/sasl.txt | /usr/lib/sendmail -t [email protected]
답변1
다음과 같이 할 수 있습니다(읽기 쉽도록 조금 줄였습니다).
{ awk 'BEGIN{...} END{...} END{if($1<100){exit(1)}}' file || exit; } > >(sendmail -t ...)
awk
라고복합 명령.if($1<100)
값 확인exit(1)
내부 코드의 추가 실행을 중단awk
하고 종료 코드 1을 반환합니다.
|| exit
awk
명령이 false(0보다 큰 종료 코드)를 반환하면 실행됩니다. 그런 다음 쉘을 종료하고 더 이상 명령을 실행하지 마십시오. 여기에서는 파이프를 사용하지 않습니다.|
왜냐하면 파이프를 사용하면 서브쉘이 열리고 해당 서브쉘이 종료되며 어쨌든 다음 명령이 실행되기 때문입니다.>(sendmail -t ...)
출력이 전송됩니다sendmail
(아직 종료되지 않은 경우).
전체 명령은 다음과 같습니다.
{ awk 'BEGIN{print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]"}
END{printf("%s\015\n", $1" | "$2)} END{if($1<100){exit(1)}}' \
/home/web0/html/tools/uptime/sasl.txt || exit; } > >(/usr/lib/sendmail -t [email protected])
답변2
따라서 이것은 단일 awk 문을 사용하여 소스 파일에서 100보다 큰 숫자로 시작하는 행의 데이터만 포함하는 이메일을 준비합니다. 그 중 어느 것도 이 조건을 충족하지 않으면 이메일이 전송되지 않을 것입니다. 이것이 제가 생각하는 것입니다. 구현하려는 구현입니다. 또한 숫자 비교를 혼란스럽게 할 수 있는 예상치 못한 텍스트가 있는 경우 첫 번째 필드가 숫자인지 확인합니다.
awk '
{
if ($1~/^[0-9]*$/ && $1>=100) {
if (BEENHERE!=1) print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]\n"
printf("%s\015\n", $1" | "$2); BEENHERE=1
}
}' /home/web0/html/tools/uptime/sasl.txt | \
/usr/lib/sendmail -t [email protected]