Estaba leyendo este guión awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Quiero saber cuál es la función 1al final
linux
shell-script
awk
Randhir Singh
fuente
fuente

awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'Respuestas:
Un
awkprograma 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
1final 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 que1está modificando la declaración anterior. O podría pensar que1es un alias para{print}, que no es técnicamente correcto.En realidad,
1es 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 seconditionda, entonces la condición predeterminada estrue).Entonces, aquí
1está la condición, que siempre se evalúatrueya que no es cero. Seactionomite, por lo que{print}se realiza el valor predeterminado . Puedes pensarlo de esta manera:fuente
1significa imprimir cada línea.La declaración awk es lo mismo que escribir:
fuente