awk manda email se

1

Com o seguinte script awk, recebo uma notificação por email. Mas eu quero receber este e-mail somente se $1 for maior ou igual a 100.

Em que posição devo colocar a declaração if? Eu tentei muitas versões sem sucesso. Seguindo meu script:

awk '

BEGIN{print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]"}

END{printf("%s5\n", $1" | "$2)}

' /home/web0/html/tools/uptime/sasl.txt | /usr/lib/sendmail -t [email protected]
    
por Michael Woldrich 02.12.2015 / 14:43

2 respostas

1

Você pode fazer assim (eu reduzi um pouco para readabillity):

{ awk 'BEGIN{...} END{...} END{if($1<100){exit(1)}}' file || exit; } > >(sendmail -t ...)
  • awk é chamado em um comando composto .
    • if($1<100) verifica o valor
    • exit(1) anula a execução adicional do código dentro de awk e retorna o código de saída 1
  • || exit isto é executado quando o comando awk retorna false (código de saída maior que 0). O shell é então encerrado e nenhum outro comando é executado. Eu não uso o pipe | aqui porque isso irá abrir uma subshell e esta subshell será então encerrada e o próximo comando será executado de qualquer maneira.
  • >(sendmail -t ...) a saída é enviada para sendmail (se ainda não tiver saído).

O comando inteiro seria então:

{ awk 'BEGIN{print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]"}
  END{printf("%s5\n", $1" | "$2)} END{if($1<100){exit(1)}}' \
/home/web0/html/tools/uptime/sasl.txt || exit; } > >(/usr/lib/sendmail -t [email protected])
    
por 02.12.2015 / 15:12
0

Então, isso usa uma única instrução awk para preparar um e-mail contendo dados apenas das linhas no arquivo de origem, começando com um número > = 100, se nenhum deles atender a essa condição, nenhum e-mail é enviado, o que é o que você está tentando alcançar. Também garante que o primeiro campo seja numérico, caso haja algum texto inesperado que possa confundir a comparação numérica:

awk '
{
  if ($1~/^[0-9]*$/ && $1>=100) {
    if (BEENHERE!=1) print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]\n"
    printf("%s5\n", $1" | "$2); BEENHERE=1
  }
}' /home/web0/html/tools/uptime/sasl.txt  | \
/usr/lib/sendmail -t [email protected]
    
por 02.12.2015 / 15:19

Tags