- ベストアンサー
awk or perlが詳しい方ご教授下さい。
お世話になります。 下記のようなファイル内容があるとします。 (あくまでも例です。実際はもっと複雑です。) この内容の大阪府に関する部分だけを抽出したいと思います。 抽出方法はawkで抽出行数を指定する方法を考えていますが、 得られている情報は「大阪府 end」の行数だけです。 「大阪府 start」の行数を取得出来れば目的は達成出来るのですが、 その方法が分かりません。 awkで指定行数から上方向に検索をかけるということは可能でしょうか? (下記例でいくと「大阪府 end」の行数から「大阪府 start」を検索し、 その行数を取得するということをやりたいです。) 可能であればその方法をご教授下さい。 awkで無理ならperlでの方法でも構いません。 <例> ●ファイルの中身 東京都 start AAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDD 1000円 東京都 end 大阪府 start AAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDD 10000円 大阪府 end 神奈川県 start AAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDD 20000円 神奈川県 end 北海道 start AAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDD 3000円 北海道 end ・ ・ ・ 以上、宜しくお願いします。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
↓な感じの事をしたいという事? 今、手元にSolarisの環境がないからFreeBSDでの実行です。 %cat data 大阪府 start 淀川支店 AAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDD 10000円 大阪府 end 大阪府 start 天王寺支店 CCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDD 1000円 大阪府 end 大阪府 start 住吉支店 AAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBB DDDDDDDDDDDDDDDDDDD 0円 大阪府 end %cat sample.sh #!/bin/sh branch="$1" datafile=data sedopt=`awk -v Flag=0 ' /start$/{Start=NR} /'${branch}'/{Flag=1} /end$/{if(Flag){printf("%d,%dp",Start,NR);exit}}' ${datafile}` sed -n ${sedopt} ${datafile} %./sample.sh 天王寺支店 大阪府 start 天王寺支店 CCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDD 1000円 大阪府 end
その他の回答 (11)
- liar_adan
- ベストアンサー率48% (730/1515)
AWKしばらくやってないから、自信ないのですが…。 行数を調べるのでしょうか? それとも、 単にその部分を抽出すればいいのでしょうか? 抽出すればいいだけだったら、 下記のような感じのコードで行けるのではないかと思います。 BEGIN{ flag = 0; Country = "大阪府"; } $1~Country && $2~"start"{ flag = 1; } { if(flag == 1)print; } $1 ~ Country && $2 ~ "end"{ flag = 0; }
お礼
ご回答ありがとうございます。 最終的には抽出をするのですが、その過程で該当行数を調べたいです。 上記の「「大阪府 end」の行数から「大阪府 start」を検索し、 その行数を取得するということをやりたいです。」ということをやりたいのですが可能でしょうか? awkで指定した行数から上方向への検索というのは可能なのでしょうか?
- 1
- 2
お礼
ご回答ありがとうございます。 頂いたソースを実行するとエラーとなってしまいます。 現在エラー個所特定中です。 また質問させて下さい。