当 awk 脚本的大括号外有代码时,这意味着什么?

Jer*_*ith 2 awk

通过 awk 教程,我遇到了这一行

substr($0,20,5) == "HELLO" {print} 
Run Code Online (Sandbox Code Playgroud)

如果有从第 20 个字符开始的“HELLO”字符串,则打印一行。

现在我认为大括号在 awk 脚本的开头是必要的,并且需要一个“if”才能使其工作,但它仍然可以工作。

有人可以解释一下它是如何评估的吗?

Cha*_*ffy 5

如果你有:

{ action }
Run Code Online (Sandbox Code Playgroud)

...然后该操作在每一行上运行。相比之下,如果您有:

condition { action }
Run Code Online (Sandbox Code Playgroud)

...然后该操作仅针对条件为真的行运行。


最后,如果您只有一个条件,那么默认操作是print

NR % 2 == 0
Run Code Online (Sandbox Code Playgroud)

...因此将每隔一行打印一次。


同样,您可以在一个脚本中包含多个对:

condition1 { action1 }
condition2 { action2 }
{ unconditional_action }
Run Code Online (Sandbox Code Playgroud)

...并且还可以有BEGINEND块,它们在执行开始和结束时运行。