`c&&!--c;` 与 `awk` 一起使用时的作用

The role of `c&&!--c;` when used with `awk`

在学习使用 awk 时,我发现表达式 awk 'c&&!--c;/regex/{c=N}' 是 select 的一种方式,并在匹配正则表达式的行下方打印第 N 行。我知道 c 最初等于 0 所以第一个匹配没有打印但是尽管搜索了高低,我不知道如何解释剩余的语法(在 /regex/) 以及它如何明确知道在打印前计算 N 行。

谁能解释一下 c&&!--c 的含义以及它如何与函数的其余部分一起作为计数器工作?

如果 c != 0 正如您猜对的那样,表达式 c 的前半部分将计算为 true

如果 --c 的计算结果为 0,则表达式 !--c 的后半部分将计算为 true;这发生在 c==1 之前。此外,只要 c != 0,表达式就会一直递减 c,因此 c 可以用作行计数器。

当正则表达式匹配时,我们设置 c == N 以便在正好 N 行之后(每行将 c 减 1)、c==1awk 将打印该行。