¿Hay alguna forma rápida y eficiente de leer líneas específicas de archivos grandes, sin cargarlos en la memoria?Lectura de una línea específica de un archivo grande en Perl
Escribí una secuencia de comandos perl, que ejecuta muchas bifurcaciones y me gustaría que leyeran líneas específicas de un archivo.
Por el momento estoy usando un comando externo:
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;
}
Su rápido y funciona - pero tal vez hay una manera más "Perl-ish", lo más rápido y eficiente de la memoria como ésta?
Como sabes, la creación de un proceso de horquilla en Perl duplica la memoria de proceso principal, por lo que si el proceso principal usa 10 MB, la horquilla utilizará al menos esa cantidad.
Mi objetivo es mantener el proceso de horquilla (por lo que el proceso principal hasta que las horquillas se ejecutan también) uso de la memoria lo más bajo posible. Es por eso que no quiero cargar todo el archivo en la memoria.
por cierto, es 'IGNORE', no' _IGNORE_'. – ikegami