정규식이 일치하지 않는 경우 awk 종료 코드

정규식이 일치하지 않는 경우 awk 종료 코드

네 번째 열이 정규식과 일치하지 않으면 종료 코드 1을 얻고 싶지만 정규식이 일치하지 않아도 awk가 0을 반환하는 것 같습니다.

정규식이 일치하지 않는 경우 awk가 1을 반환하도록 만드는 방법을 아시나요?

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

답변1

나에게 이것은 awk의 용서할 수 없는 죄입니다. 오류 상태가 필요한 경우 위의 awk 체조 대신 grep dot에 파이프합니다.

$ date | awk '/Fri/'
Fri May 29 21:26:18 EDT 2020
$ date | awk '/Fri/' | grep .
Fri May 29 21:27:11 EDT 2020
$ echo $?
0
$ date | awk '/Mon/' | grep .
$ echo $?
1

답변2

반환 코드를 보유하도록 변수를 설정한 다음 종료하기 전에 해당 변수를 무효화할 수 있습니다.

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

필요하지 않은 경우 부품을 \b삭제할 수 있습니다 .grep

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

관련 정보