Esiste un modo rapido e efficiente per leggere righe specifiche di file di grandi dimensioni, senza caricarle in memoria?Lettura di una linea specifica da file di grandi dimensioni in Perl
Ho scritto uno script perl, che esegue molte forcelle e mi piacerebbe che leggessero le righe specifiche da un file.
Al momento Im utilizzando un comando esterno:
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;
}
sua veloce e funziona - ma forse c'è un modo più "Perl-ish", più veloce e più efficiente della memoria come questa?
Come sapete, la creazione di un processo fork in Perl duplica la memoria di processo principale, quindi se il processo principale utilizza 10 MB, la forcella utilizzerà almeno così tanto.
Il mio obiettivo è quello di mantenere il processo di fork (quindi anche il processo principale fino alla forchetta in esecuzione) l'utilizzo della memoria il più basso possibile. Ecco perché non voglio caricare l'intero file in memoria.
btw, è 'IGNORE', non' _IGNORE_'. – ikegami