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