Rereading a file 60,000 times is likely to slow things down somewhat. The trick is to read each file only once. To realise the trick you need to get the information you need from the smaller file and store it in memory. In this case a hash is probably the best way to store it because you can test very quickly for the match condition (assuming you don't actually require a regex match). Consider:

use strict; use warnings; # Sample data my $catFile = <<CAT; 123 234 345 678 CAT my $dataFile = <<DATA; A|12|r|some|56|78|90 E|123|r|some|56|78|90 D|678|r|some|56|78|90 C|12|r|some|56|78|90 F|345|r|y|98|0|0 DATA # Build the hash open my $catIn, '<', \$catFile; my %keys = map {chomp; $_ => 1} <$catIn>; close $catIn; open my $dataIn, '<', \$dataFile; while (<$dataIn>) { chomp; my @parts = split /\|/; next unless exists $keys{$parts[1]}; print join ('|', @parts), "\n"; } close($dataIn);

Prints:

E|123|r|some|56|78|90 D|678|r|some|56|78|90 F|345|r|y|98|0|0

Perl reduces RSI - it saves typing

In reply to Re: Compare 2 files and create a new one if it matches by GrandFather
in thread Compare 2 files and create a new one if it matches by shawshankred

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.