Вы могли бы выиграть от использования модуля CSV для анализа данных из большого файла.Это также может быть излишним, и больше проблем, чем оно того стоит, что вы должны судить сами.Имейте в виду, что Text :: CSV_XS , используемый ниже, может изменить ваши данные в соответствии со стандартами CSV, и есть много вариантов настройки того, как выглядит ваш вывод.
Это базовый сценарий, которыйможет начать вас
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);
}
}
Если вы уверены, что ваши данные не будут содержать встроенных вкладок, вам может быть просто разделить строку на вкладках вместо использования Text :: CSV_XS:
while (<$bigfile>) {
chomp;
my @row = split /\t/;
if (defined $lookup{$row[0]}) {
print "$_\n";
}
}