
Digamos que eu tenha um arquivo de texto de entrada (sample_simple.txt) assim:
3 1 10 1 6
9 4 2 4 1
9 2 2 2 1
Usando o comando: awk '$0=$1" "$1*$2" "$3*$4' sample_simple.txt
, obtenho a seguinte saída:
3 3 10
9 36 8
9 18 4
Então, usando o comando: awk '$1*$2" "$3*$4' sample_simple.txt
, nada muda no arquivo de entrada:
3 1 10 1 6
9 4 2 4 1
9 2 2 2 1
A única mudança entre os comandos é '$0=$1'
: Alguém pode explicar isso?
Responder1
Na verdade não é $0=$1
; pense nisso mais como
$0 = ($1" "$1*$2" "$3*$4)
Então
$0=$1" "$1*$2" "$3*$4
atribui o resultado da concatenação de strings $1" "$1*$2" "$3*$4
à variável $0
e executa a ação padrão {print $0}
, enquanto
$1*$2" "$3*$4
concatena os resultados de $1*$2
e $3*$4
(com um espaço " "
entre) e executa a ação padrão {print $0}
porque o resultado é uma string não vazia. O valor de $0
não é modificado.
Responder2
em awk
$0
é linha inteira- a linha pode ser alterada em tempo real
por isso
$1" "$1*$2" "$3*$4
crie 3 campos$1
e$1*$2
$3*$4
$0=
o resultado é colocado na linha eimpresso implicitamente(ver edição).
Editar:
Se você omitir $0=
, a linha de saída não será alterada.
Como apontou Steeldriver, como a pesquisa é positiva, a linha é prinetd.