- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:大量データから抽出する際の効率よいperlプログラム作成について教えて)
大量データから効率よく抽出する方法を教えてください
このQ&Aのポイント
- 大量データから抽出する際の効率よいperlプログラム作成について教えてください。具体的には、AファイルとBファイルがあり、BファイルのURLがAファイルにある場合にAファイルの該当行を抽出したいです。
- 現在はgrepを使用して抽出していますが、処理時間が非常に長くかかってしまっています。効率的な抽出方法を教えていただけますか?
- AファイルとBファイルはURL降順ソートされており、BファイルにあるURLがAファイルにある場合、Aファイルの該当行を抽出したいです。どのようなperlプログラムを作成すれば効率的に抽出できるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そこまで効率が重視される状況なのでしょうか? 私ならこのようなコードで処理しますが、大半のケースでは必要十分だと思います。 インデントは全角スペースになっています。 #!/usr/bin/perl use strict; # BファイルのURLをハッシュに読み込む open(IN1, "B_FILE.txt") or die; my %hash = map{ chomp; ($_ => undef); } <IN1>; # Aファイルは膨大なので逐次処理 open(IN2, "A_FILE.txt") or die; while(<IN2>){ my(undef, $url, undef) = split /\t/; # URLが存在すれば出力 if(exists $hash{$url}){ print; } }
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
「降順」なのか「昇順」なのか, どっちなんだろう. さておき, どちらもソートされているので, タイミングの問題を間違えなければ 1パスでできるはず. 1. A と B から 1行ずつ読む 2. 一致すれば出力して A から 1行読む 3. 一致しないときには「先に出るはずのもの」をみつけてそれに対応するファイルから 1行読む いずれにしても読み込めなくなったら終了.
質問者
お礼
教えていただき、ありがとうございます。 私のほうも 論理的には このやり方でやるのだろうという気がしていましたが、 申し訳ないですが、プログラム初心者のため、どのように書いたらよいか 具体的に教えていただけませんでしょうか?
お礼
本処理でどこまで速くなるか やってみたいと思います。ありがとうございます。