Estaba leyendo este guión awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Quiero saber cuál es la función 1
al final
linux
shell-script
awk
Randhir Singh
fuente
fuente
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
Respuestas:
Un
awk
programa es una serie de pares condición-acción, las condiciones están fuera de las llaves y las acciones están encerradas en ellas. Una condición se considera falsa si se evalúa a cero o la cadena vacía, cualquier otra cosa es verdadera (las variables no inicializadas son cero o cadena vacía, dependiendo del contexto, por lo que son falsas). Se puede implicar una condición o una acción; los frenos sin una condición (cuando comienza la suya) se considera que tienen una condición verdadera y siempre se ejecutan si se golpean, y cualquier condición sin una acción imprimirá la línea si y solo si se cumple la condición.El
1
final de su script es una condición (siempre verdadera) sin acción, por lo que ejecuta la acción predeterminada para cada línea, imprimiendo la línea (que puede haber sido modificada por la acción anterior entre llaves).fuente
Realmente no me gustan estos tipos de atajos porque ofusca y confunde cómo se analiza. Cuando lees algo así
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, podrías pensar que1
está modificando la declaración anterior. O podría pensar que1
es un alias para{print}
, que no es técnicamente correcto.En realidad,
1
es una declaración completamente separada. Puede separar las declaraciones de esta manera:Cada formato de declaración awk es
condition {action}
. Si no se{action}
da, la acción predeterminada es{print}
. (Si no secondition
da, entonces la condición predeterminada estrue
).Entonces, aquí
1
está la condición, que siempre se evalúatrue
ya que no es cero. Seaction
omite, por lo que{print}
se realiza el valor predeterminado . Puedes pensarlo de esta manera:fuente
1
significa imprimir cada línea.La declaración awk es lo mismo que escribir:
fuente