¿Qué significa $0=$1 en awk?

¿Qué significa $0=$1 en awk?

Digamos que tengo un archivo de texto de entrada (sample_simple.txt) como este:

3 1 10 1 6
9 4 2  4 1
9 2 2  2 1

Al usar el comando:, awk '$0=$1" "$1*$2" "$3*$4' sample_simple.txtobtengo el siguiente resultado:

3 3 10
9 36 8
9 18 4

Luego, usando el comando:, awk '$1*$2" "$3*$4' sample_simple.txtnada cambia desde el archivo de entrada:

3 1 10 1 6
9 4 2  4 1
9 2 2  2 1

El único cambio entre los comandos es '$0=$1': ¿Alguien puede explicar esto?

Respuesta1

En realidad no lo es $0=$1; piensa en ello más como

$0 = ($1" "$1*$2" "$3*$4)

Entonces

$0=$1" "$1*$2" "$3*$4

asigna el resultado de la concatenación de cadenas $1" "$1*$2" "$3*$4a la variable $0y realiza la acción predeterminada {print $0}, mientras que

 $1*$2" "$3*$4

concatena los resultados de $1*$2y $3*$4(con un espacio " "entre ellos) y realiza la acción predeterminada {print $0}porque el resultado es una cadena no vacía. El valor de $0no se modifica.

Respuesta2

en mal estado

  • $0es toda la linea
  • La línea se puede cambiar sobre la marcha.

de este modo

  • $1" "$1*$2" "$3*$4crear 3 campos $1, $1*$2y$3*$4
  • $0=el resultado se pone en la línea y se imprime implícitamente (ver edición).

Editar :

Si omite $0=, la línea de salida no cambia.

Como señaló Steeldriver, dado que la búsqueda es positiva, la línea se imprime.

información relacionada