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

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

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

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

shell
[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でやる場合は、以下のようにコマンドを実行してやればよい。

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

shell
[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