Es könnte von Vorteil sein, ein csv-Modul zum Parsen der Daten aus der großen Datei zu verwenden. Es könnte aber auch ein Overkill sein und mehr Mühe machen, als es wert ist, das müssen Sie selbst beurteilen. Beachten Sie, dass Text::CSV_XS kann Ihre Daten so verändern, dass sie den csv-Standards entsprechen, und es gibt viele Optionen, um das Aussehen Ihrer Ausgabe zu verändern.
Dies ist ein einfaches Skript, das Ihnen den Einstieg erleichtern könnte.
use strict;
use warnings;
use autodie;
use Text::CSV_XS;
open my $lookup, '<', "lookupfile";
my %lookup;
while (<$lookup>) {
next if /^\s*$/; # remove empty lines
chomp; # remove newline
$lookup{$_} = 1;
}
close $lookup;
my $csv = Text::CSV_XS->new ({
binary => 1,
eol => $/,
sep_char => "\t",
});
open my $bigfile, '<', 'bigfile';
while (my $row = $csv->getline ($bigfile)) {
if (defined ($lookup{$row->[0]})) {
$csv->print(\*STDOUT, $row);
}
}
Wenn Sie sich sicher sind, dass Ihre Daten keine eingebetteten Tabulatoren enthalten, können Sie die Zeile auch einfach an Tabulatoren aufteilen, anstatt Text::CSV_XS zu verwenden:
while (<$bigfile>) {
chomp;
my @row = split /\t/;
if (defined $lookup{$row[0]}) {
print "$_\n";
}
}