
Допустим, у меня есть входной текстовый файл (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, поскольку поиск положительный, строка выводится на печать.