2010-09-22 18 views

Respuesta

6

Puede usar sed.

# print line number 10 
$ sed -n '10p' file_name 
$ sed '10!d' file_name 
$ sed '10q;d' file_name 
+1

En mi sistema, el último ejemplo es generalmente más rápido que las versiones de awk, cabeza/cola o rubí menos que la línea está cerca del final del archivo. Solo la versión de cola/cabeza comienza a hacerse un poco más rápida a medida que la línea se acerca al final del archivo. –

3

awk -v linenum=10 'NR == linenum {print; exit}' file

+0

Podría simplemente usar 'awk NR == 10 file_name' como en mi respuesta. – dogbane

+0

Si el archivo es enorme, no desea leer el resto innecesariamente, así que salga. –

0
ruby -ne '$.==10 and (print; exit)' file 
+0

'ruby -ne '$. == 10 y (imprimir; salir)' 'será más rápido. –

2

Si conoce las líneas tienen la misma longitud, a continuación, un programa podría directamente índice en que esa línea sin necesidad de leer todos los precedentes: algo así como desde podría ser capaz de hacer eso, o podrías codificarlo en media docena de líneas en la mayoría de los idiomas. Busque una función llamada seek() o fseek().

De lo contrario, tal vez ...

tail +N | head -n 1 

... ya que esto pide la cola para saltar a la enésima línea, y hay menos líneas ponen innecesariamente a través de la tubería que con la cabeza a la cola solución.

+0

Eso debería ser 'cabeza 1' en lugar de 'cabeza -1'. –

+0

@Dennis: ¿estás seguro? Con todas las implementaciones de cabecera que he visto 'head 1' trataría de encontrar un archivo llamado" 1 ". He verificado dos veces en GNU/Linux y definitivamente es 'head -1'. ¿Qué versión de cabeza usas? –

+0

Oh, lo siento, GNU 'head' insiste en' -n' tan 'head -n 1'. Escribí mi comentario Con un '-n -1' GNU' head' da como resultado todas menos la última línea en lugar de solo la primera. Versión: head (GNU coreutils) 7.4 –

4
#print 10th line 
awk NR==10 file_name 
Cuestiones relacionadas