awk 在匹配条件后打印下一个?

awk 在匹配条件后打印下一个?

使用命令时:awk 'f&&!--f;{if(length($1)>8){f=1}}' awk.write我可以在匹配的行之后打印行。

我知道用法,flags但不知道&&!--f真正的作用是什么?

this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line

答案1

我们来看一下f&&!--f。在这里,条件f和都!--f需要评估为 True,以便执行默认操作(打印行)。&&是符合逻辑的AND

awk如果 中 的计算结果不是,则该语句为真0。因此,如果f不是,则第一个条件为真0

!--f意味着立即减少f1f--减少一,但只是稍后一点,请参阅本文档了解详情)。并!否定了先前陈述的真实值。因此,如果f1--f则变为0,又名 False。这!使得这是真的。这应该可以捕获 if fdoes not equal 的情况1

在这个简单的示例中,第二个测试并不是绝对必要的,但可以确保f重置为0。一个较短的版本是:

awk 'f&&!--f;length($1)>8{f=1}' awk.write

并且可能更容易理解:

awk 'f&&{print;f=0};length($1)>8{f=1}' awk.write

相关内容