https://www.gnu.org/software/gawk/manual/gawk.html
基于第 1.1.2 节 1.1.2 在没有输入文件的情况下运行 awk 我可以理解awk '{print $0}' marks.txt
它就像 echo 一样。它会返回
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
以下代码也按预期工作。
awk '{print $0}' marks.txt | awk '{print $2 "\t" $3 "\t"$4}'
我不明白 awk '{$1=""; print $0}' marks.txt
即使现在直觉上是有道理的。
答案1
$1=""; print $0
清除第一个字段并在打印之前重新计算整行。这记录在改变领域GAWK 手册的部分:
当字段的值更改时(如 所感知的
awk
),输入记录的文本将重新计算以包含旧字段所在的新字段。换句话说,$0
进行更改以反映已更改的字段。
这在 AWK 的所有实现中都是如此,它不是 GNU 扩展;AWK 编程语言对此行为的描述如下:
这很重要:什么时候被赋值或替换、、 等
$0
改变,并且将被重新计算;同样,当、等之一发生更改时,将使用分隔字段进行重建。$1
$2
NF
$1
$2
$0
OFS