awk中$0=$1是什么意思?

awk中$0=$1是什么意思?

假设我有一个输入文本文件 (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 指出的那样,由于搜索是肯定的,因此线路将被打印。

相关内容