Mil*_*ils 4 grep awk perl text-processing
我正在寻找一种方法来搜索模式的第 n 次出现并在模式后打印 k 行。我想awk
会比grep
在这种情况下工作得更好,但我不知道如何正确地做到这一点......
假设我有以下文本文件:
Draft
blablablabla
tralalalalala
Draft
blablablabla
tralalalalala
Draft
important line 1
important line 2
Draft
blablablabla
tralalalalala
Run Code Online (Sandbox Code Playgroud)
在这种情况下n=3
和k=2
,我想打印以下模式“草案”的3TH发生2行。在我的特定情况下,n 和 k 可能会有所不同。
这是一个简单的方法吗?
Perl 来拯救:
perl -sne '$c++ if /Draft/;
if ($c == $n) { print scalar <> for 1 .. $k; }
' -- -n=3 -k=2 < input
Run Code Online (Sandbox Code Playgroud)
awk:打印第 3 行和第 4 行“草稿”之间的行。
awk -v n=3 '/Draft/ { p = (++num == n) ; next }; p' file
Run Code Online (Sandbox Code Playgroud)
有一个优化:当看到第四稿时退出。