¿Existe una forma "canónica" de hacerlo? He estado usando head -n | tail -1
que hace el truco, pero me he estado preguntando si hay una herramienta Bash que específicamente extrae una línea (o un rango de líneas) de un archivo.
Por "canónico" me refiero a un programa cuya función principal es hacer eso.
head
y pipe con tail
será lento para un archivo enorme. Yo sugeriría sed
así:
sed 'NUMq;d' file
Donde NUM
es el número de la línea que quieres imprimir; así, por ejemplo, sed '10q;d' file
para imprimir la 10ª línea de file
.
Explicación:
NUMq
saldrá inmediatamente cuando el número de línea sea NUM
.
dborrará la línea en lugar de imprimirla; esto se inhibe en la última línea porque
q` hace que se salte el resto del script al salir.
Si tiene NUM
en una variable, querrá usar comillas dobles en lugar de simples:
sed "${NUM}q;d" file
sed -n '2p' < file.txt
imprimirá la segunda línea
sed -n '2011p' < file.txt
2011a línea
sed -n '10,33p' < file.txt
línea 10 hasta la línea 33
sed -n '1p;3p' < file.txt
1ª y 3ª línea
y así sucesivamente...
Para añadir líneas con sed, puede comprobar esto:
También puede usar Perl para esto:
perl -wnl -e '$.== NUM && print && exit;' some.file