separador meaning filtrar campos awk

meaning - ¿Por qué "1" en awk imprime la línea actual?



awk unix (3)

En esta respuesta ,

awk ''$2=="no"{$3="N/A"}1'' file

Fue aceptado. Tenga en cuenta el 1 al final de la secuencia de comandos AWK. En los comentarios, el autor de la respuesta dijo:

[1 es] una forma críptica de mostrar la línea actual.

Estoy confundido. ¿Cómo funciona?


AWK trabaja en el método de la condición y luego la acción. Entonces, si alguna condición es VERDADERA, entonces se ejecutará cualquier acción que mencionemos que suceda.

En el caso de 1 significa que estamos haciendo que esa condición sea VERDADERA y, en este caso, no mencionamos ninguna acción que suceda, por lo que la print acción por defecto de awk sucederá.

Así que por eso escribimos 1 en atajo realmente hablando.


En awk ,

Como 1 siempre se evalúa como verdadero , realiza la operación predeterminada {print $0} , por lo tanto, imprime la línea actual almacenada en $0

Entonces, el awk ''$2=="no"{$3="N/A"}1'' file es equivalente a y una abreviatura de

awk ''$2=="no"{$3="N/A"} {print $0}'' file

Nuevamente, $0 es el argumento predeterminado para imprimir , por lo que también podría escribir

awk ''$2=="no"{$3="N/A"} {print}'' file

De hecho, también puede usar cualquier número que no sea cero o cualquier condición que siempre se evalúe como verdadera en lugar de 1


La documentación says

En una regla awk, se puede omitir el patrón o la acción, pero no ambos. Si se omite el patrón, entonces la acción se realiza para cada línea de entrada. Si se omite la acción, la acción predeterminada es imprimir todas las líneas que coincidan con el patrón.

Entonces, trata al 1 como patrón sin acción. La acción por defecto es imprimir la línea.

Incluso si tienes un par de reglas, como en

awk '' in_net { if (/^/s+bindIp:/) { print " bindIp: 0.0.0.0" next } else if (/^/s*(#.*)?$/) { in_net = 0 } } /^net:/ { in_net = 1 } 1 '' /etc/mongod.conf

Aún necesita 1 , ya que la acción predeterminada solo se activa cuando se encuentra una regla sin acción.