有没有快速和内存有效的方法来读取大文件的特定行,而无需将其加载到内存?
@H_301_2@我编写了一个perl脚本,它运行许多forks,我希望他们从文件中读取特定的行.
@H_301_2@目前我正在使用外部命令:
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; }@H_301_2@它的速度很快而且很有效 – 但也许有更多的“Perl-ish”方式,就像这个一样快速和内存效率? @H_301_2@如您所知,在Perl中创建fork进程会复制主进程内存 – 因此,如果主进程使用10MB,则fork将使用至少那么多. @H_301_2@我的目标是保持fork进程(所以主要进程直到运行forks)内存使用尽可能低.这就是为什么我不想将整个文件加载到内存中.