linux - texto - Cómo mostrar todas las líneas de la línea n de un archivo en Unix
crear archivo en linux (6)
El comando awk
puede hacer esto imprimiendo solo líneas, el número de registro NR
es tres o más:
awk ''NR>=3'' input_file_name
También puede pasar el valor a awk
usando una variable si es necesario:
awk -v n=3 ''NR>=n'' input_file_name
(y también puede usar -vn=${num}
para usar una variable de entorno).
Hay muchas otras herramientas que puede usar para hacer el mismo trabajo, tail
, sed
y perl
entre ellas o, ya que este es un sitio de preguntas y respuestas sobre programación, simplemente haga su propio trabajo:
#include <stdio.h>
int main (void) {
// Need character and # of newlines to skip.
int ch, newlines = 2;
// Loop until EOF or first lines skipped, exit on EOF.
while ((ch = getchar()) != EOF)
if ((ch == ''/n'') && (--newlines == 0))
break;
if (ch == EOF)
return 0;
// Now just echo all other characters, then return.
while ((ch = getchar()) != EOF)
putchar (ch);
return 0;
}
Ahora normalmente no escribirías tu propio programa de filtro para esto, pero como pediste el comando más corto, puedes usar ese código fuente para crear un ejecutable llamado x
para hacerlo:
x <input_file_name
Sería difícil encontrar un comando más corto que eso. Por supuesto, asumiendo que estás en un entorno UNIXy (específicamente, bash
), también podrías simplemente:
alias x awk ''NR>=3''
:-)
Quiero mostrar todas las líneas a partir de la línea nth. Diga, imprima la tercera línea de un archivo y todas las líneas siguientes hasta el final del archivo. ¿Hay un comando para eso?
Imprima, pero borre las líneas 1 a 2:
awk ''BEGIN{n=5}NR<=n{next}1'' file
Para mostrar desde la 5ª línea:
awk ''NR>4'' file
Puedes usar awk
así:
sed ''1,2d'' filename
-
BEGIN{n=5}
: antes de que comience el procesamiento del archivo, establecen
en el número de líneas a saltar (5). -
NR<=n{next}
: omite el procesamiento si el número de línea es menor o igual quen
. -
1
- taquigrafía paraprint
todo lo demás.
puedes usar cola
Extracto de la página del manual:
-n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth
por ejemplo
tail -n +10 file
genera el contenido de los archivos comenzando con la línea 10
sed -n ''3,$p'' file
Esto es solo texto de relleno porque no aprecia las líneas de comando cortas.