Si las líneas de ese fichero son de longitud distinta, no puedes.
Si las líneas son todas de igual longitud, solo necesitas un poco de matemáticas.
Si las líneas son de una longitud aproximada a una cierta cantidad, también podrías llegar a acercarte a la línea que quieres, pero solo eso, de forma aproximada.
Una forma de resolver este problema (sin tener que leer todo el fichero) es creando un fichero de índices: abres el fichero, y por cada línea, guardas la posición del marcador de lectura del fichero (perldoc -f
tell()). La primera línea tendrá una posición de lectura 0, la segunda será la posición (tell()) donde acabó la lectura de la primera línea, etc.
Luego, si quieres acceder a la línea 40.000, solo tienes que leer el desplazamiento que hay en la posición 40.000 del fichero de índices. Te posiciones con la ayuda de
seek() y ya puedes leer la línea.
Aunque... esto es más cómodo:
Using perl Syntax Highlighting
use Tie
::File;
tie my @array, 'Tie::File', 'fichero_enorme.log' or die "ERROR: $!\n";
print $array[39_999
];Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Con
Tie::File, el fichero NO es leído entero, con lo que se puede usar para acceder a ficheros enormes, a costa de ser unos milisegundos más lento que la solución del indexado. Bueno... te ahorras crear el índice
P.D. La primera línea es la 0.