GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es el significado de 1 al final del script awk?

Un awk El 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 como cero o como una cadena vacía, todo lo demás es verdadero (las variables no inicializadas son cero o una cadena vacía, según el contexto, por lo que son falsas). Puede implicarse una condición o una acción; se considera que las llaves sin condición (como comienza la suya) tienen una condición verdadera y siempre se ejecutan si se aciertan, y cualquier condición sin acción imprimirá la línea si y solo si se cumple la condición.

El 1 al final de su secuencia de comandos hay 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).


Realmente no me gustan estos tipos de atajos porque ofuscan y confunden cómo se analizan. Cuando lees algo como awk -F"=" '{OFS="=";gsub(",",";",$2)}1' , podrías pensar que el 1 está modificando la declaración anterior. O podrías pensar 1 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:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'

Cada formato de instrucción awk es condition {action} . Si no hay {action} dado, entonces la acción por defecto es {print} . (Si no hay condition dado, entonces la condición por defecto es true .)

Así que aquí, 1 es la condición, que siempre se evalúa como true ya que es distinto de cero. El action se omite, por lo que el {print} predeterminado es interpretado. Puedes pensarlo de esta manera:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'

1 significa imprimir cada línea.

La instrucción awk es lo mismo que escribir:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'

Linux
  1. ¿Cuál es el significado de *nix?

  2. ¿Cuáles son las diferencias entre grep, awk y sed?

  3. ¿Qué significa &al final de un comando de Linux?

  4. ¿Cuál es el significado de 'lista negra' en GStreamer?

  5. ¿Cuál es el significado de `! -d` en este comando Bash?

¿Qué hace la línea '!/bin/sh -e'?

¿Cuál es el significado de fork() y grep en Linux?

¿Cuál es el significado de un signo de dólar doble en bash/Makefile?

¿Qué constituye un 'campo' para el comando de corte?

¿Cuál es la forma más rápida de ejecutar un script?

¿Cuál es el significado de curl -k -i -X ​​en Linux?