こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Bシェルでファイルから特定の範囲を抽出するには?

お世話になります。
ディレクトリにファイル群があるとします。
そのファイル群の中の特定のファイルの特定の個所を抽出し、別ファイルに吐くというシェルを組みたいのですが、
どのようにしたら良いでしょうか?

<例>
●ファイル群は作成された日付を持ちます。
売上_200601.txt、売上_200602.txt、売上_2006003.txt、売上_200604.txt・・・・・・

●ファイルの中身はある法則が成立しています。
(売上_20060101.txtの中身)
東京都 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



※都道府県の重複はありません

月毎の売上が纏められているファイルの中から特定の年月の都道府県売上分を抽出したいです。
抽出条件としましては「年月」「都道府県」が与えられます。
上記の例でいくと、「売上_200601.txt」の「東京都 start~東京都 end」までを抽出したいのです。
ファイルの特定は抽出条件の「年月」を元にfindコマンドにて導き出すことは可能なのですが、
中身の「東京都 start~東京都 end」をどのように抽出するのかが分かりません。

分かり難い内容に恐縮ですが、ご教授の程よろしくお願いします。

投稿日時 - 2006-08-19 01:51:38

QNo.2348178

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#1>AWKを使う例
----------------------------------------------------------------
/^東京都 start$/,/^東京都 end$/{ print }
----------------------------------------------------------------
でイイと思います。
例えば、日本語をちゃんと認識するようになっていれば
上記をselect.awk という名前で保存してあるとすると
awk -f select.awk 売上_200601.txt
でうまくいくと思います。(gawk ではテストしました)

投稿日時 - 2006-08-21 16:01:53

ANo.2

↓のような感じ。

awk '/^東京都 start/,/^東京都 end/{print}' ファイル

ただし、マルチバイト文字対応awkでないと正常に動作しないかもしれません。

投稿日時 - 2006-08-21 15:58:55

ANo.1

Perl か AWK を使うのがいいんじゃないかと思います

投稿日時 - 2006-08-19 03:48:54

お礼

ご回答ありがとうございます。
AWKを使うケールの例を挙げて頂けることは可能でしょうか?
お願いします。

投稿日時 - 2006-08-21 14:17:48

あなたにオススメの質問