大容量ファイルの特定の行をメモリにロードせずに読み取る高速かつメモリ効率のよい方法はありますか?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;
}
その高速とそれが動作する - など、高速で、この1のように効率的なメモリのような、より「のPerlっぽい」方法を、多分そこですか?
ご存じのように、Perlでフォークプロセスを作成すると、メインのプロセスメモリが複製されるため、メインプロセスで10MBが使用されている場合、フォークは少なくともその分を使用します。
私の目標はフォークプロセス(フォークを実行するまでのメインプロセスも)メモリをできるだけ使用しないようにすることです。それで私はなぜファイル全体をメモリにロードしたくないのですか?
btw、それは '_IGNORE_'ではなく' IGNORE'です。 – ikegami