Se podría hacer algo como:
head -n<lineno> <file> | tail -n1
que le daría las líneas <lineno>
, a continuación, sólo se dará la última línea de salida (la línea).
Editar: Parece que todas las soluciones aquí son bastante lentas. Sin embargo, por definición, tendrá que recorrer todos los registros, ya que el sistema operativo no tiene forma de analizar los archivos orientados a la línea, ya que los archivos están orientados por bytes. (En cierto sentido, todos estos programas van a hacer es contar el número de caracteres \n
o \r
.) En lugar de una gran respuesta, también presentaré los tiempos en mi sistema de varios de estos comandos.
[[email protected] ~]$ time sed -n '145430980p' br.txt
0b10010011111111010001101111010111
real 0m25.871s
user 0m17.315s
sys 0m2.360s
[[email protected] ~]$ time head -n 145430980 br.txt | tail -n1
0b10010011111111010001101111010111
real 0m41.112s
user 0m39.385s
sys 0m4.291s
[[email protected] ~]$ time awk 'NR==145430980{print;exit}' br.txt
0b10010011111111010001101111010111
real 2m8.835s
user 1m38.076s
sys 0m3.337s
Por lo tanto, en mi sistema, parece que la solución sed -n '<lineno>p' <file>
es más rápido!
¿Por qué()? Eso le da a mi versión de bash un error, sin embargo, podría haber sido corregido en versiones posteriores. – Anders
Quiere que reemplaces (archivo) con el archivo – Malfist
Pude acelerar esto en un factor de diez (cuando se usa con un archivo de 100000 líneas) al salir después de imprimir: 'sed -n '52 {p; q} '' – Philipp