• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:大量データから抽出する際の効率よいperlプログラム作成について教えて)

大量データから効率よく抽出する方法を教えてください

このQ&Aのポイント
  • 大量データから抽出する際の効率よいperlプログラム作成について教えてください。具体的には、AファイルとBファイルがあり、BファイルのURLがAファイルにある場合にAファイルの該当行を抽出したいです。
  • 現在はgrepを使用して抽出していますが、処理時間が非常に長くかかってしまっています。効率的な抽出方法を教えていただけますか?
  • AファイルとBファイルはURL降順ソートされており、BファイルにあるURLがAファイルにある場合、Aファイルの該当行を抽出したいです。どのようなperlプログラムを作成すれば効率的に抽出できるでしょうか?

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

  • ベストアンサー
  • shiren2
  • ベストアンサー率47% (139/295)
回答No.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;  } }

1204533
質問者

お礼

本処理でどこまで速くなるか やってみたいと思います。ありがとうございます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「降順」なのか「昇順」なのか, どっちなんだろう. さておき, どちらもソートされているので, タイミングの問題を間違えなければ 1パスでできるはず. 1. A と B から 1行ずつ読む 2. 一致すれば出力して A から 1行読む 3. 一致しないときには「先に出るはずのもの」をみつけてそれに対応するファイルから 1行読む いずれにしても読み込めなくなったら終了.

1204533
質問者

お礼

教えていただき、ありがとうございます。 私のほうも 論理的には このやり方でやるのだろうという気がしていましたが、 申し訳ないですが、プログラム初心者のため、どのように書いたらよいか 具体的に教えていただけませんでしょうか?

関連するQ&A