在awk中,你可以一起使用模式和END块吗?

Bri*_*ian 3 awk

在awk中,您可以对给定的模式执行操作,例如:

echo foo | awk '/foo/ {print "foo"}'
Run Code Online (Sandbox Code Playgroud)

或者您可以在输入结束时执行操作,例如:

echo foo | awk 'END {print "END"}'
Run Code Online (Sandbox Code Playgroud)

但似乎不可能同时做到这两点,例如:

# echo foo | awk '/foo/ || END {print "foo or END"}'
awk: syntax error at source line 1
 context is
    /foo/ || >>>  END <<<  {print "foo or END"}
awk: bailing out at source line 1
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ed *_*ton 6

不.这样做:

awk '
/foo/ { prtInfo() }
END   { prtInfo() }
function prtInfo() { print "foo or END" }
'
Run Code Online (Sandbox Code Playgroud)