• ベストアンサー

大量ファイルからいくつかの条件に該当する情報を多量にあるファイルから抽出

五種類(A,B,C,D,E)の列があり、ある条件を満たした行の情報を知りたい。たとえば、 A:四角 B:鳥 C:海 となっている行の「D」と「E」の値を知りたい。 1つのファイルごとにやるのは「フィルタ」を使って簡単にできるのですが、このファイルが多量(2000個)にあります。 これらのファイルから、ひとつずつ上のような作業をしていたらきりがありません。 抽出結果として 「検索条件」+DとEの値 をExcelの一つのシート上にすべて表示してほしい。(Excelじゃなくても構いません) 具体的に書くと、以下のファイルがあります。例としてファイルの個数は2つですが、実際は2000個で、行数も各ファイルに1000行近くあります。 [ファイル1] a,b,c,d,e 丸,鳥,海,(1),あ 四角,馬,空,(1),く 三角,猫,大地,(3),め 四角,鳥,海,(5),さ 四角,馬,空,(1),く 丸,鳥,海,(5),け 三角,犬,空,(2),き 四角,馬,空,(1),く 三角,猫,大地,(3),も 四角,鳥,海,(4),け [ファイル2] a,b,c,d,e 丸,鳥,海,(1),あ 四角,馬,空,(1),く 四角,鳥,海,(4),け 四角,鳥,海,(5),も 丸,馬,空,(1),く 四角,鳥,海,(5),ま 三角,犬,空,(2),き 四角,馬,空,(1),く 三角,猫,大地,(3),も 四角,鳥,海,(4),ご [抽出結果] 四角,鳥,海,(5),さ 四角,鳥,海,(4),け 四角,鳥,海,(4),け 四角,鳥,海,(5),も 四角,鳥,海,(5),ま 四角,鳥,海,(4),ご となります。 なにかよい方法はありませんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

サクラエディタを利用してみてはいかがでしょうか? (秀丸でもかまいませんが) サクラエディタのgrep機能にて、条件に『四角,鳥,海』と入力し、 フォルダで、ファイルが入っているところのフォルダを指定すれば、 :区切りでファイル名が入りますが、似たようなことはできます。 一発仕事だったら、これをうまく使うと、楽かなと思います。

macus
質問者

お礼

アドバイスありがとうございます。 早速サクラエディタをインストールしてみました。 すごいですね!見事、抽出されました。 …ただ、私の会社で勝手に新しいソフトをインストールできない。そもそもインターネットにすらつなげない。…(まあ、実行ファイルを持って行ってバレないようにインストールしてしまえばいいんですけどね^^ もう少し、回答を待ってみます。

macus
質問者

補足

すみません。ちょっと問題が発生しました。 検索方法として、1と3列目が四角,海となるようにしたいのですが、列が飛んでしまうと検索してくれないようです。 そういう検索もできるような設定があるのでしょうか? すみませんが、よろしくお願いします。

その他の回答 (5)

  • next_x
  • ベストアンサー率39% (144/369)
回答No.6

No.4のフォロー jgawkってのはGNU AWKの日本語対応版なのでダウンロードしてこないと Windowsには無いですよ。だからgoogleでバイナリを捜してくれとかいとるわけです。Linuxとかには日本語対応版ではないかもしれんけれども 入っているんですけどね。 コマンドライン系のツールなら入ってるの気づかれにくいと思うんだけど。 awkや正規表現がどういうものかわからないならここに行くといい。 http://homepage2.nifty.com/mozu/koza/park_of_text.html 古いバージョンだがここから行ける所にjgawk(2.1.5+1.1.5)と簡易な WindowsGUIアプリもある。 なお、あのスクリプトは GNU Awk 3.1.5 build date Jul 24 2006 の日本語対応版で動作確認済み。

macus
質問者

お礼

再度回答ありがとうございます。 こんな方法があるんですね。URLの最初の導入部分をよんで、興味を持ちました。 ありがとうございました。

回答No.5

No.3の者ですが 条件入力の、正規表現にチェックは入れていますか? この表現は正規表現という表現ですので、 このチェックが入っていないと利きません。 確認してみてください。

macus
質問者

お礼

またまたアドバイスありがとうございます。 うまくいきました。すごく便利なツールですね^^ ありがとうございました。

  • next_x
  • ベストアンサー率39% (144/369)
回答No.4

jgawkで処理したらどうですか? 結構簡単にスクリプト書けますよ。 Windowsのバイナリもgoogleで探せばどっかにあるでしょう。 #-------------- test.awk BEGIN { FS=","; } { if (($1 == "四角") && ($3 == "海")){ print $0; } } #------------ このスクリプトをファイルにしてコマンドプロンプトで以下のような実行をすれば簡単に結果が出ると思います。 for %f in (*.dat) do jgawk -f test.awk %f>>結果.txt $0は処理中の行の内容全部 $1,$2・・・はFSで指定した文字を区切りとして分割した内容 ・・・一行で書けそうなんだけど何故かうまく動かない・・・。 書き込んだらスクリプトのスペースが省略される~余計なお世話だ。

macus
質問者

お礼

回答ありがとうございます。 すみません。まったく理解できませんでした。 BEGIN { FS=","; } { if (($1 == "四角") && ($3 == "海")){ print $0; } } をメモ帳に書いて、test.awk という名前でデスクトップ上に保存して、 コマンドプロンプト開いて、 C:\Documents and Settings\username> for %f in (*.dat) do jgawk -f test.awk %f>>結果.txt と書いて実行しても何も起きませんでした。 よろしくお願いします。

回答No.3

No.2の者ですが、 正規表現を利用します。 条件に『^四角,.*,海,』 と入力すれば、四角、海を含む行が検索されます。 しかし、この検索結果は、3列目が海であることを保証していません。 あくまで、先頭は四角から始まり、,海,を含む行を抽出しています。

macus
質問者

お礼

再度アドバイスありがとうございます。 やってみたのですが、うまくいきません。 四角の前の「^」 *の前「.」 海のあとの「,」 はミスではなく、必要なのでしょうか?とりあえず全部入れた場合でもうまくいきませんでした。

  • violet430
  • ベストアンサー率36% (27472/75001)
回答No.1

もしエクセルの話なら、Officeソフトのカテゴリでマクロの組み方を教えてもらうと良いですよ。

macus
質問者

お礼

アドバイスありがとうございます。 最初はそう思ったのですが、Excelで出来ないかもしれないので、全体的に聞こうかと思いました。 もう少し待ってみて、解決策がないようでしたら、そうしますね。

関連するQ&A

専門家に質問してみよう