如何在第二场比赛后打印所有线路?

时间:2017-09-19 17:04:42

标签: awk

awk -vN=2 'n>=N;/last pid.*/{++n}' file

我希望在第二次正则表达式匹配后打印出所有行,包括包含正则表达式的行。这很接近,但它不会打印出包含正则表达式的行。对此有任何快速帮助吗?

示例输入

last pid: something
blah
blah
last pid: something else
this
is
what
i
want

期望的输出:

last pid: something else
this
is
what
i
want

2 个答案:

答案 0 :(得分:1)

您只需要颠倒语句的顺序:

$ awk -vN=2 '/last pid/{++n} n>=N' file
last pid: something else
this
is
what
i
want

此外,.*中的/last pid.*/也是多余的。匹配/last pid.*/的所有内容都匹配/last pid/,反之亦然。

答案 1 :(得分:1)

awk解决方案:

$ cat tst.awk
/last pid/ { p++ }         # if you see a last pid, add 1 to p
p < N {next}1              # whenever p smaller than N, skip.
                           # else print

用以下方式调用:

awk -v N=2 -f tst.awk input.txt

给出:

$ awk -v N=2 -f tst.awk input.txt
last pid: something else
this
is
what
i
want

或oneliner:

$ awk -v N=2 '/last pid/ { p++ }p < N {next}1' input.txt