awk는 다음과 같은 경우 이메일을 보냅니다.

awk는 다음과 같은 경우 이메일을 보냅니다.

다음의 작은 awk 스크립트를 사용하여 이메일 알림을 받습니다. 그런데 이 메일을 받고 싶어요오직$1100보다 크거나 같은 경우 .

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을 반환합니다.
  • || exitawk명령이 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]

관련 정보