使用命令时: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
意味着立即减少f
(1
也f--
减少一,但只是稍后一点,请参阅本文档了解详情)。并!
否定了先前陈述的真实值。因此,如果f
是1
,--f
则变为0
,又名 False。这!
使得这是真的。这应该可以捕获 if f
does 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