有沒有快速和高效的內存讀取方式來讀取大文件的特定行,而無需將其加載到內存中?從Perl中的大文件中讀取特定行
我寫了一個perl腳本,它運行許多分支,我希望它們從文件中讀取特定的行。
在使用外部命令的那一刻林:
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;
}
其快速和它的作品 - 但也許有更多的「Perl的十歲上下」的方式,以最快的速度和內存效率,因爲這一個?
正如你所知,在Perl中創建一個fork進程會重複主進程內存 - 所以如果主進程使用10MB,fork至少會使用那麼多。
我的目標是保持叉過程(所以主流程,直到運行叉也)內存使用盡可能低。這就是爲什麼我不想將整個文件加載到內存中。
btw,它是'IGNORE',而不是'_IGNORE_'。 – ikegami