Este es un seguimiento de mi pregunta anterior .
Estoy validando el número de campos en / etc / passwd usando este práctico fragmento de código. En el siguiente ejemplo, los usuarios 'fieldcount1' y 'fieldcount2' tienen el número incorrecto 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 notará, awk saldrá con un estado de retorno de 0. Desde su punto de vista, aquí no hay problemas.
Me gustaría incorporar esta declaración awk en un script de shell. Me gustaría imprimir todas las líneas que son error, y establecer el código de retorno en 1 (error).
Puedo intentar forzar un estado de salida particular, pero luego awk solo imprime una sola línea:
$ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
$ echo $?
1
¿Puedo forzar a awk a salir con un estado de retorno de '1' e imprimir todas las líneas que coincidan?
; echo $?
después de esta declaración awk. Sin embargo,echo $?
nunca se ejecuta porqueEND {exit err}'
termina el script. ¿Hay alguna manera de establecer el estado de devolución sin salir?