Este é um seguimento da minha pergunta anterior .
Estou validando o número de campos em / etc / passwd usando este snippit útil. No exemplo a seguir, os usuários 'fieldcount1' e 'fieldcount2' têm o número errado de campos:
$ awk -F: ' NF!=7 {print}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
fieldcount2:blah::blah:1002:100:fieldcount2:/home/fieldcount2:/bin/bash:
$ echo $?
0
Como você notará, o awk sairá com um status de retorno igual a 0. Do ponto de vista dele, não há problemas aqui.
Gostaria de incorporar essa declaração do awk em um script de shell. Gostaria de imprimir todas as linhas com erro e definir o código de retorno como 1 (erro).
Posso tentar forçar um status de saída específico, mas o awk apenas imprime uma única linha:
$ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
$ echo $?
1
Posso forçar o awk a sair com o status de retorno '1' e imprimir todas as linhas correspondentes?
; echo $?
depois dessa declaração do awk. No entanto,echo $?
nunca é executado porqueEND {exit err}'
finaliza o script. Existe uma maneira de definir o status de retorno sem sair?