rav*_*aka 4 awk text-processing
我有一个要求。假设我的文件内容是
a
b
c
d
e
f
d
e
f
Run Code Online (Sandbox Code Playgroud)
我想打印从b
到第二次重复的行d
。是否有任何命令使用 awk 来执行此操作?
输出应该是
b
c
d
e
f
d
Run Code Online (Sandbox Code Playgroud)
如果是第一次b
,我知道命令
awk '/b/,/d/' file.txt
Run Code Online (Sandbox Code Playgroud)
但是如果第二次重复,我想将文本打印到匹配点。我想在一行中包含命令。
一种方法是使用标志和计数器来跟踪
$ awk '/b/{f=1; c=0} f; /d/ && ++c==2{f=0}' file.txt
b
c
d
e
f
d
Run Code Online (Sandbox Code Playgroud)
/b/{f=1; c=0}
设置开始匹配和初始化计数器的标志f;
设置 long 标志时打印输入记录/d/ && ++c==2{f=0}
如果第二次匹配结束字符串,则清除标志awk '/b/{f=1} f; /d/ && ++c==2{exit}'
如果只有一组要提取,可以简化为请注意,如果结束匹配没有 2 个匹配项,它将打印到输入结束
$ seq 10 | awk '/4/{f=1; c=0} f; /6/ && ++c==2{f=0}'
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)