Cómo convertir las líneas 10 a 100 de un archivo de 200 líneas en un archivo nuevo

Cómo convertir las líneas 10 a 100 de un archivo de 200 líneas en un archivo nuevo

Tengo un archivo con 200 líneas.

Necesito extraer líneas del 10 al 100 y colocarlas en un archivo nuevo.

¿Cómo se hace esto en Unix/Linux?

¿Cuáles son los posibles comandos que podría utilizar?

Respuesta1

Usarsed:

sed -n -e '10,100p' input.txt > output.txt

sed -nmedionoimprime cada línea de forma predeterminada. -esignifica ejecutar el siguiente argumento como un script sed. 10,100pes un script sed que significa comenzar en la línea 10, hasta la línea 100 (inclusive), imprimir ( p) esa línea. Luego la salida se guarda en output.txt.

Si su archivo es más largo de lo sugerido, esta versión (sugerida en los comentarios) será más rápida:

sed -e '1,9d;100q'

Eso significaborrarlíneas 1-9,abandonardespués de la línea 100 e imprima el resto. Para 200 líneas no importará, pero para 200.000 líneas la primera versión seguirá mirando cada línea incluso cuando nunca las imprima. En general, prefiero la primera versión por ser explícita, pero con un archivo largo será mucho más rápido: usted conoce mejor sus datos.

Alternativamente, puedes usar heady tailen combinación:

tail -n +10 input.txt | head -n 91 > output.txt

Esta vez, tail -n +10imprime el archivo completo a partir de la línea 10 e head -n 91imprime las primeras 91 líneas (hasta la línea 100 inclusive del archivo original). Se redirige a output.txtde la misma manera.

Respuesta2

esto debería hacer

tail -n +10 file.txt | head -n 91 > newfile.txt

Respuesta3

Si hicieras esto en vim, sería bastante simple. Suponga que su archivo tiene un nombre srcy el archivo al que desea mover las líneas es dest. Si destaún no existe, lo crearías:

touch dest

Luego, abra ambos srcy desten vim(la -pbandera abre los argumentos en pestañas):

vim -p src dest

Salta a la décima línea; seleccione todo, desde la línea 10 hasta la línea 100; tirón; cambie a la pestaña que contiene dest; pegar.

10ggv101ygtp

Nota: 101selecciona al principio de la línea 101 (capta \nal final de la línea 100).


Obviamente, este es un proceso un poco más complicado que usar una herramienta de línea de comandos, pero tiene la ventaja de brindarte una selección visual (para que puedas estar seguro de que obtienes todo lo que deseas). Sin embargo, este también parece un buen caso de uso para awk:

awk 'NR==10, NR==100' src > dest

La NRvariable le permite comparar patrones con el número de líneas. Por lo tanto, el comando anterior extrae las líneas 10 a 100 srcy luego su shell redirige la salida a dest.

Respuesta4

Puedes hacerlo de muchas maneras.

Una awksolución:

$ awk 'NR<10{next};1;NR>100{exit}' file > new_file

Una perlsolución:

$ perl -nle '
    print if $. > 9 and $. < 101;
    exit if $. > 100;
' file > new_file

información relacionada