• 締切済み

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」をどのように抽出するのかが分かりません。 分かり難い内容に恐縮ですが、ご教授の程よろしくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

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

  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

↓のような感じ。 awk '/^東京都 start/,/^東京都 end/{print}' ファイル ただし、マルチバイト文字対応awkでないと正常に動作しないかもしれません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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

hound777
質問者

お礼

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

関連するQ&A

  • 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 ・ ・ ・ 以上、宜しくお願いします。

  • ファイル中の数行を抜き出す処理について(シェル)

    ファイルaaa.txtの2行目から4行目を抜き出し、 ファイルbbb.txtに格納する方法として、 sed -n '2,4p' aaa.txt > bbb.txt がありますが、 変数を使用し、 start=2 end=4 sed -n '${start},${end}p' aaa.txt > bbb.txt とすると、エラーが発生します。 どうすればよろしいのでしょうか。

  • テキストファイルの特定のものだけの抽出方法

    はじめまして。質問させていただきます。 テキストファイルに一行ずつ、バラバラの個人情報が入っているのですが (例:千葉県・東京都・茨城県・千葉県・群馬県・千葉県など) それを特定の一つだけを残したいのです。 (例:千葉県・千葉県・千葉県) その抽出方法を教えていただけませんでしょうか?

  • perlで特定行から特定行までを抜き出しor置換

    perlで以下のようなことをしたいと考えています。 以下のことを、コマンドラインから「perl ~」という形で 実行したいのですが、どのよにすればよいでしょうか。 1.特定行から特定行までを抜き出し 2.特定行から特定行の範囲で文字列置換 例えば、次のようなテキストファイルがあったとします。 example.txt ================================== #START aaaa hogehoge test okok perl script #END ================================== 上記ファイルを読み込んで、 1.「#START」から「#END」の間に挟まれた行だけ抜き出し 2.「#START」から「#END」の間で、「test」を置換 のです。 sedで言うところの sed -e '/#START/,/#END/ s/YYYYMM/201603/g' test.txt をやりたいのです。

    • ベストアンサー
    • Perl
  • ファイルの特定行の抽出

    C++言語についての質問です。 C++を利用して下記の処理を考えています。 下記のようなテキストファイルから、「名前」で始まる行だけを 抽出して、別のテキストファイへ書き込みを行います。 また、その際に”「名前」の表記”+”スペース文字”は削除します。 ----------------- 住所 東京都 名前 AAAAA 年齢 15才 ----------------- 住所 神奈川県 名前 BBBBB 年齢 20才 ----------------- <略> 実行後に出力されるテキストファイルには、 AAAAA BBBBB と記載されるように処理を行いたいです。 初心者のため、実現可能かも分かっていません・・。 お手数ですが、アドバイスをお願いします。 具体的な方法についても記載して頂けると助かります。 よろしくお願いします。

  • 任意のファイルを開くには

    WIN.XP Office2003を使用しています。 質問が3つあります。 Q1.ファイル「都道府県抽出」の「検索」シートのセルA1に入力(このセルの内容は任意で変わる)されている名前と同じファイルのシート2をマクロボタンのクリックで開く。 エクセル内のファイル   ファイル「都道府県抽出」   ファイル「001 北海道」 シート「1」と「2」       「002 青森」  シート「1」と「2」       「003 岩手」  シート「1」と「2」                          以降、全都道府県分のファイルがある  ようするに、「都道府県抽出」ファイルの「検索」シートのA1セルに静岡県が入っている場合は、マクロボタンのクリックで「00* 静岡県」ファイルのシート「2」を開く。 東京都が入っている場合は、マクロボタンのクリックで「00* 東京都」ファイルのシート「2」を開く。 Q2.セルA1に入力されている名称をファイル名として、マクロボタンで名前をつけて保存させる。 Q3.A列に「小計」という文字が入力されていたら、その行(1行すべて)にだけ編み掛けをする。

  • しょうもない質問ですが…。北海道って

    どうでもいい質問ですが、仕事中に話題になったので…。 都道府県で 東京都は、東京 神奈川県は、神奈川 など都道府県を付けずに会話をしますが 何で北海道は、北海と言わないんでしょう~? 本当にどうでもいい質問ですが…。

  • perlで指定範囲を複数ファイルに分割する方法は?

    お世話になります。 perlを使用して、 下記の元ファイル[infile.txt]よりstart~endの範囲を各テキストファイルに 分割出力する方法をご教授いただけないでしょうか。  ※出力ファイル名は元のファイル名 (infile) + 1行目の文字列(単語)にします。   例>>infile_1111.txt , infile_333.txt よろしくお願いいたします。 [infile.txt] aaaa bbbb start 1111 2222 end dddd eeee start 3333 4444 end

  • 指定した文字列を含む行から、指定した文字列を

    含む行まで、全ての行を抽出して別ファイル(名前は元ファイルと同じ)としたいのです。 対象ファイルに結果を上書きでもかまいません。 指定したフォルダの中にある複数のフォルダ各々に1つずつ入っているテキストファイルが対象になります。 例) 東京都 新宿区 <start123AAA> 東京都 港区 <end>AAABBB 東京都 目黒区 どのファイルにも必ず<start と<end の文字列があります。(必ず1組です) <start の文字列を含む行から <end の文字列を含む行までを 抽出したいのです。 (欲しい結果↓) <start123AAA> 東京都 港区 <end>AAABBB フリーのエディタソフトのgrep、grepのマクロ、バッチでできないものかと試してみているのですが どうしてもうまくいきません。 抽出したい範囲、削除する範囲には禁則文字?が入っているのでバッチは難しいのでしょうか? できればバッチで処理できればなと思っているのですが、うまくいきません。 (<>!""/ あたりが入っています。別の文字に置き換えることは可能です) 範囲を抽出ではなく、 <startを含む行の一つ上の行から前を全て削除 <endを含む行の一つしたの行から後を全て削除 する方法や VBAで、スタート行をとエンド行をSearchして抽出する方法など ご教授いただきたくお願い致します。

  • Excel2010 都道府県以降抽出

    都道府県以降の抽出をどうしてもユーザー定義関数で作成したいです。 都道府県の抽出のはできました。 Function Extraction(住所文字列 As String) Dim strPref As String Dim N As Long strPref = Left(Trim(住所文字列), 3) Select Case strPref Case Is = "東京都", "北海道", "大阪府", "京都府" N = 3 Case Else N = InStr(Left(住所文字列, 4), "県") End Select If N > 0 Then Extraction = Left(住所文字列, N) Else Extraction = CVErr(3) '3:#VALUE! End If End Function よろしくお願いします。