código de saída do awk se a expressão regular não corresponder

2

Eu quero obter o código de saída 1 se a quarta coluna não corresponder à expressão regular, mas parece que o awk retornará 0, mesmo que a expressão regular não tenha correspondido.

Alguma idéia de como fazer o awk retornar 1 se o regexp não combina?

root@server:~# netstat -nap|grep "LISTEN\b"
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1144/rsync          
tcp        0      0 1.2.3.4.5:53                0.0.0.0:*                   LISTEN      25213/named         
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      25213/named         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      28888/sshd          
tcp        0      0 0.0.0.0:9686                0.0.0.0:*                   LISTEN      1150/stunnel        
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      25213/named         
root@server:~# netstat -nap|grep "LISTEN\b"|awk '$4 ~ /:80$/ {print $NF}'
root@server:~# echo $?
0
    
por Sharuzzaman Ahmat Raslan 09.09.2016 / 11:42

1 resposta

3

Você pode definir uma variável para manter o código de retorno e negar a variável antes de sair:

netstat -nap    |
grep "LISTEN\b" |
awk '$4 ~ /:80$/ {rc = 1; print $NF}; END { exit !rc }'

Se você não precisar de \b , poderá remover grep part:

netstat -nap | awk '/LISTEN/ && $4 ~ /:80$/ {rc = 1; print $NF}; END { exit !rc }'
    
por 09.09.2016 / 11:56