Büyük dosyadaki belirli satırları belleğe yüklemeden hızlı ve bellek açısından verimli bir yol var mı?Perl'deki büyük dosyadan belirli bir satırın okunması
Çok sayıda çatal çalıştıran bir perl komut dosyası yazdım ve bunların bir dosyadan belirli satırları okumasını istiyorum. Harici komutunu kullanarak şu Im anda
:
sub getFileLine {
my ($filePath, $lineWanted) = @_;
$SIG{PIPE} = '_IGNORE_';
open(my $fh, '-|:utf8', "tail -q -n +$lineWanted \"$filePath\" | head -n 1");
my $line = <$fh>;
close $fh;
chomp($line);
return $line;
}
Onun hızlı ve çalışır - hızlı ve bunun gibi verimli bellek gibi daha "Perl-imsi" yol, ama belki orada?
Bildiğiniz gibi, Perl'de bir çatal işlemi oluşturmak ana işlem belleğini kopyalar - böylece ana işlem 10MB kullanıyorsa, çatal en az o kadar kullanır.
Amacım, çatal işlemini (böylece çatalları çalıştırana kadar ana işlem) bellek kullanımını mümkün olduğunca düşük tutmaktır. Bu yüzden tüm dosyayı belleğe yüklemek istemiyorum.
btw, ''IGNORE_' değil' IGNORE' değil. – ikegami