
特定の文字列を含む行~行を抽出する場合、こちらのやり方を応用して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