`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==1
和 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==1
和 awk
将打印该行。