
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.txt
obtengo el siguiente resultado:
3 3 10
9 36 8
9 18 4
Luego, usando el comando:, awk '$1*$2" "$3*$4' sample_simple.txt
nada 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*$4
a la variable $0
y realiza la acción predeterminada {print $0}
, mientras que
$1*$2" "$3*$4
concatena los resultados de $1*$2
y $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 $0
no se modifica.
Respuesta2
en mal estado
$0
es toda la linea- La línea se puede cambiar sobre la marcha.
de este modo
$1" "$1*$2" "$3*$4
crear 3 campos$1
,$1*$2
y$3*$4
$0=
el resultado se pone en la línea yse 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.