O que significa $0=$1 no awk?

O que significa $0=$1 no awk?

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 $0e executa a ação padrão {print $0}, enquanto

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

concatena os resultados de $1*$2e $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 $0não é modificado.

Responder2

em awk

  • $0é linha inteira
  • a linha pode ser alterada em tempo real

por isso

  • $1" "$1*$2" "$3*$4crie 3 campos $1e $1*$2$3*$4
  • $0=o resultado é colocado na linha e impresso 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.

informação relacionada