今天我在网上搜索一个命令,打印下一行两行之后,我遇到了一个我无法理解的awk命令。
$ /usr/xpg4/bin/awk '_&&_--;/PATTERN/{_=2}' input
有人可以解释一下吗?
在实现普通的awk成语(下面的成语“e”)时,有人使用_作为变量名。将每个_更改为字数(或c),然后查看是否对您有意义。
一些背景:以下成语描述了如何选择一个给定特定正则表达式匹配的记录范围:
a) Print all records from some regexp: awk '/regexp/{f=1}f' file b) Print all records after some regexp: awk 'f;/regexp/{f=1}' file c) Print the Nth record after some regexp: awk 'c&&!--c;/regexp/{c=N}' file d) Print every record except the Nth record after some regexp: awk 'c&&!--c{next}/regexp/{c=N}1' file e) Print the N records after some regexp: awk 'c&&c--;/regexp/{c=N}' file f) Print every record except the N records after some regexp: awk 'c&&c--{next}/regexp/{c=N}1' file g) Print the N records from some regexp: awk '/regexp/{c=N}c&&c--' file
在适当的情况下,我将变量名从“f”改为“c”,这样更能表达变量实际上是什么。