我的档案是这样的:
/开始模式/
第一场比赛
/ end pattern /
其他文字
/开始模式/
第二场比赛
/ end pattern /
其他文字
/ begin pattern /
这是我的 想打印出来/结束 图案/
其他文字
如何使用awk打印出最后一场比赛?我只知道如何打印出所有这些比赛。
答案 0 :(得分:2)
取决于是否要打印包含定界符的行:
$ awk '
/begin pattern/ { rec=""; f=1 }
f { rec=rec $0 ORS; if (/end pattern/) {last=rec; f=0} }
END { printf "%s", last }
' file
/begin pattern/
This is the one I want to print out
/end pattern/
或:
$ awk '
f { if (/end pattern/) {last=rec; f=0} rec=rec $0 ORS }
/begin pattern/ { rec=""; f=1 }
END { printf "%s", last }
' file
This is the one I want to print out
这可确保您打印的内容是一个以begin pattern
开头并以end pattern
结尾的块,因此您不只是在start pattern
之后没有{{1 }}(如果在输入文件的末尾存在)。如果输入中不存在匹配的块,它还可以确保您不打印空白行。
答案 1 :(得分:1)
存储当前匹配并使用END块将其打印出来:
awk '/end pattern/{flag=0} flag{m=$0} /begin pattern/{flag =1} END{print m}' file
如果/ begin pattern /和/ end pattern /.
之间只有一行,则此方法有效答案 2 :(得分:1)
awk 'END { print r }
/end pattern/ { f = x }
/begin pattern/ { f = 1; r = x }
f++ > 1 { r = r ? r RS $0 : $0 }
' infile