awk 打印从第 n 个到最后一个的所有列

awk 打印从第 n 个到最后一个的所有列

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

https://stackoverflow.com/questions/2961635/using-awk-to-print-all-columns-from-the-nth-to-the-last?answertab=votes#tab-top

以下代码也按预期工作。

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$2NF$1$2$0OFS

相关内容