Lesen einer bestimmten Zeile von großen Dateien in Perl

Gibt es keine schnelle und Speicher-effiziente Art und Weise zu Lesen, bestimmte Zeilen große Datei, ohne laden auf memory?

Schrieb ich ein perl-Skript, dass ausgeführt, viele Gabeln und ich möchte Sie zu Lesen, einzelne Zeilen aus einer Datei.

Im moment Im mit einer externen Befehl:

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;
}

Seine schnelle und es funktioniert - aber vielleicht gibt es eine "Perl-ish" Art und Weise, wie schnell und wie Speicher effizient wie dieses?

Wie Sie wissen, die Schaffung einer Gabel Prozess in Perl Duplikate der wichtigsten Prozess-Speicher - wenn also der Haupt-Prozess ist mit 10 MB, die Gabel verwenden, mindestens so viel.

Mein Ziel ist, halten Gabel Prozess (also Haupt-Prozess läuft bis Gabeln auch) memory-Nutzung so gering wie möglich. Das ist, warum ich nicht wollen, zu laden, die ganze Datei in den Speicher.

  • btw, es ist IGNORE, nicht _IGNORE_.
InformationsquelleAutor gib | 2011-12-18
Schreibe einen Kommentar