假设我有一个输入文本文件 (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
连接and的结果$3*$4
(之间有空格" "
)并执行默认操作,{print $0}
因为结果是非空字符串。的值$0
不被修改。
答案2
在 awk 中
$0
是整行- 线路可以即时更改
因此
$1" "$1*$2" "$3*$4
创建 3 个字段$1
,$1*$2
并且$3*$4
$0=
结果被放入该行,并隐式打印(参见编辑)。
编辑 :
如果省略$0=
,输出行不会改变。
正如 Steeldriver 指出的那样,由于搜索是肯定的,因此线路将被打印。