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
Run Code Online (Sandbox Code Playgroud)
/sf/ask/207314481/?answertab=votes#tab-top
以下代码也按预期工作。
awk '{print $0}' marks.txt | awk '{print $2 "\t" $3 "\t"$4}'
Run Code Online (Sandbox Code Playgroud)
我不明白 awk '{$1=""; print $0}' marks.txt
即使现在直觉上是有道理的。
$1=""; print $0
清除第一个字段并在打印之前重新计算整行。这记录在GAWK 手册的更改字段部分中:
\n\n当字段的值更改时(如 所感知的
\nawk
),输入记录的文本将重新计算以包含旧字段所在的新字段。换句话说,$0
进行更改以反映已更改的字段。
这在 AWK 的所有实现中都是如此,它\xe2\x80\x99s 不是 GNU 扩展;AWK 编程语言对此行为的描述如下:
\n\n\n这很重要:什么时候
\n$0
被赋值或替换、 、 等改变$1
,$2
并且NF
将被重新计算;同样,当$1
、$2
等之一发生更改时,将使用分隔字段$0
进行重建。OFS