以下 AWK 格式:
/REGEX/ {Action}
Action
如果当前行匹配将执行REGEX
。
有没有办法添加一个else
子句,如果当前行与正则表达式不匹配,将执行该子句,而不显式使用 if-then-else,例如:
/REGEX/ {Action-if-matches} {Action-if-does-not-match}
以下 AWK 格式:
/REGEX/ {Action}
Action
如果当前行匹配将执行REGEX
。
有没有办法添加一个else
子句,如果当前行与正则表达式不匹配,将执行该子句,而不显式使用 if-then-else,例如:
/REGEX/ {Action-if-matches} {Action-if-does-not-match}
没那么短:
/REGEX/ {Action-if-matches}
! /REGEX/ {Action-if-does-not-match}
但是 (g)awk 也支持三元运算符:
{ /REGEX/ ? matching=1 : matching = 0 ; if ( matching ==1 ) { matching_action } else { notmatching_action } }
更新:
根据伟大的格伦杰克曼的说法,您可以在比赛中分配变量,例如:
m = /REGEX/ { matching-action } !m { NOT-matching-action }
还有next
:
/REGEX/ {
Action
next # skip to the next line
}
{ will only get here if the current line does *not* match /REGEX/ }
你可以做一个“技巧”。如您所知,AWK 尝试按顺序将输入与每个正则表达式匹配,以执行其块。
如果 $1 为“1”,则此代码执行第二个块,否则执行第三个块:
awk '{used = 0} $1 == 1 {print $1" is 1 !!"; used = 1;} used == 0 {print $1" is not 1 !!";}'
如果输入是:
1
2
它打印:
1 is 1 !!
2 is not 1 !!