awkのフラグを使って特定の文字列~文字列の行を抽出する

特定の文字列を含む行~行を抽出する場合、こちらのやり方を応用してsedで抽出を行う場合が多いと思うが、awkでもフラグを立てることで同じようなことが可能だ。

例)sedでの特定の文字列~文字列の行を抽出する

sed -n '/キーワード/,/キーワード/p'

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test2.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj
[root@BS-PUB-CENT7-01 ~]# sed -n '/c/,/g/p' /tmp/test2.txt
ccccc
ddddd
eeeee
fffff
ggggg

awkでやる場合は、以下のようにコマンドを実行してやればよい。

awk '/キーワード/ {flag=1} /キーワード/ {flag=0} flag' # 最後の行を含めない場合
awk '/キーワード/ {flag=1} /キーワード/ {flag=0;print} flag' # 最後の行を含める場合

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test3.txt
1,aaaaa,x
2,bbbbb,y
3,ccccc,z
4,ddddd,y
5,eeeee,y
6,fffff,x
7,ggggg,z
8,hhhhh,x
9,iiiii,x
10,jjjjj,z
[root@BS-PUB-CENT7-01 ~]# awk '/bbbbb/ {flag=1} /fffff/ {flag=0} flag' /tmp/test3.txt # 最後の行を含めない場合
2,bbbbb,y
3,ccccc,z
4,ddddd,y
5,eeeee,y
[root@BS-PUB-CENT7-01 ~]# awk '/bbbbb/ {flag=1} /fffff/ {flag=0;print} flag' /tmp/test3.txt # 最後の行を含める場合
2,bbbbb,y
3,ccccc,z
4,ddddd,y
5,eeeee,y
6,fffff,x