• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlによる ファイル内容 検出方法について)

perlによるファイル内容検出方法について

このQ&Aのポイント
  • Perlを使ったファイル内容の検出方法を教えてください
  • 初心者向けに、大量のデータ処理に効率的なPerlプログラムを紹介してください
  • ファイル(1)とファイル(2)の内容を比較して、一致するリストを出力する方法を教えてください

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

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

この例だけで単純に考えれば 2列目をキーにして出力していけばよいだけみたいだし、 先頭は時間ぽい? ということは固定長扱いに出来そうですね。 ということで、2列目だけの連想配列作ってキーがあるか無いかで 判断するのはどうでしょう? 数百万程度なら20分もあれば終わりそうだけど。。。 #実装はイメージです(笑 my %PK = (); open($FILE_1, '<') || die; while( <$FILE_1> ){ $PK{ substr($_,8,13) } = 1; } close($FILE_1); open($FILE_2,'<') || die; open(OUT, '>OUTPUT_FILE'); while( ($line = <$FILE_2>) ) { print OUT $line if( exists($PK{ substr($line,0,13) }) ); } close(OUT); close($FILE_2); オンメモリーで処理していくのでそれなりのメモリは使うかもしれません。 ちなみに、UNIXならjoinというコマンドもあります。

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

これだけ大きなデータを効率よく操作するなら、データベースにしてしまうのがいい気がします。

1204533
質問者

お礼

ファイル内容に ',%等 DB格納時にエラーとなるものが多数入っているため、ファイルでの処理をしたいと思っております。  また、ファイルが今後も増えていくことがあり、できれば基本プログラムを作っておきたいと考えております。 アドバイスいただき、ありがとうございます。

  • hyter
  • ベストアンサー率73% (31/42)
回答No.2

サンプルを作った後に、質問文の中に「効率のよいプログラムを」と 書いてあったのに気づきました……。 効率はあまり考えてないですが、何かのヒントになれば。 ========================= #!/usr/bin/perl use strict; use warnings; my $file1_path = "./file1.txt"; my $file2_path = "./file2.txt"; my $output_path = "./output.txt"; my @file1_data = (); my @file2_data = (); my @output_data = (); my @buff = (); #+-- file1の内容を取得 --+# open F1, "< $file1_path"; @file1_data = <F1>; close F1; #+-- file2の内容を取得 --+# open F2, "< $file2_path"; @file2_data = <F2>; close F2; #+-- 比較 --+# for ( my $i = 0; $i <= $#file2_data; $i++ ) { # 改行コードを削除 $file2_data[$i] =~ s/\n//g; # TABで分割 @buff = split( "\t", $file2_data[$i] ); # grepでマッチするものがあるかどうか確認 if ( grep ( /^..:..:..\t$buff[0]\t.*$buff[1].*\t.*$/, @file1_data ) ) { # マッチするものを確保 push @output_data, $file2_data[$i]; } } #+-- 出力 --+# open OUT, "> $output_path"; for ( my $j = 0; $j <= $#output_data; $j++ ) { print OUT $output_data[$j], "\n"; } close OUT; exit; =========================

1204533
質問者

お礼

grepでの対応は自分でも試みているのですが、どうもすごい時間がかかり、処理結果はなかなかでてこないのです。 perl初心者のため、基本的なプログラムもまともにかけないので、参考にさせていただきます。 ありがとうございました。

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

^ は何を意味するのでしょうか? そして, 「ファイル(2)の内容がファイル(1)にある」とはどういう時を指すのでしょうか? しかし, 「百万行」とか「数千万行」とかの巨大なファイルを扱うのもすごいけど, そんなファイルを作るのもすごいなぁ....

関連するQ&A