Что означает $0=$1 в awk?

Что означает $0=$1 в awk?

Допустим, у меня есть входной текстовый файл (sample_simple.txt) следующего вида:

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

Используя команду:, awk '$0=$1" "$1*$2" "$3*$4' sample_simple.txtя получаю следующий вывод:

3 3 10
9 36 8
9 18 4

Затем с помощью команды: awk '$1*$2" "$3*$4' sample_simple.txtничего не меняется по сравнению с входным файлом:

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

Единственное различие между командами — это '$0=$1'... Может ли кто-нибудь объяснить это?

решение1

Это не совсем так $0=$1; думайте об этом скорее как о

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

Так

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

присваивает результат конкатенации строк $1" "$1*$2" "$3*$4переменной $0и выполняет действие по умолчанию {print $0}, тогда как

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

объединяет результаты $1*$2и $3*$4(с пробелом " "между ними) и выполняет действие по умолчанию, {print $0}поскольку результат — непустая строка. Значение $0не изменяется.

решение2

в awk

  • $0это целая линия
  • строку можно менять на лету

таким образом

  • $1" "$1*$2" "$3*$4создайте 3 поля $1, $1*$2и$3*$4
  • $0=результат выводится на экран и неявно выводится на печать (см. редактирование).

Редактировать :

Если опустить $0=, выходная строка не изменится.

Как отметил Steeldriver, поскольку поиск положительный, строка выводится на печать.

Связанный контент