2010-02-10 6 views
15

Necesito extraer un número determinado de líneas de un archivo dado el número de línea de inicio y el número de línea final.Obtenga un rango de líneas de un archivo dado los números de línea de inicio y final

¿Cómo podría hacer esto rápidamente en Unix (en realidad es Solaris para que el sabor GNU no esté disponible).

Thx

+0

Vea también: http://stackoverflow.com/questions/1429556/shell-bash-command-to-get-nth-line-of-stdout –

+0

Posible duplicado de [¿Cómo puedo extraer un rango predeterminado de líneas de un archivo de texto en Unix?] (http://stackoverflow.com/questions/83329/how-can-i-extract-a-predetermined-range-of-lines-from-a-text-file-on-unix) – lesmana

Respuesta

40

Para imprimir líneas 6-10:

sed -n '6,10p' file 

Si el archivo es enorme, y el número de línea final es pequeño en comparación con el número de líneas, puede que sea más eficiente mediante la :

sed -n '10q;6,10p' file 

de probar un archivo con un número bastante grande de líneas:

$ wc -l test.txt 
368048 test.txt 
$ du -k test.txt 
24640 test.txt 
$ time sed -n '10q;6,10p' test.txt >/dev/null 
real 0m0.005s 
user 0m0.001s 
sys 0m0.003s 
$ time sed -n '6,10p' test.txt >/dev/null 
real 0m0.123s 
user 0m0.092s 
sys 0m0.030s 
+0

AAARRGGH !! :) eso es mejor que el mío – ScaryAardvark

+0

Pensé en eso pero no pude conseguir que dejara de imprimir las otras líneas ... la opción -n .. :) – ScaryAardvark

+3

Rah sed! Sed! Sed! Sed! +1 –

0

que puede hacerlo con nawk así

#!/bin/sh 
start=10 
end=20 
nawk -vs="$start" -ve="$end" 'NR>e{exit}NR>=s' file 
0

O

head -n "$last" file | tail -n +"$first" 
1

me escribió un programa llamado Haskell splitter que hace exactamente esto: tener un read through my release blog post.

Usted puede utilizar el programa de la siguiente manera:

$ cat somefile | splitter 4,6-10,50- 

que hará que las líneas de cuatro, seis y diez y cincuenta líneas en adelante. Y eso es todo lo que hay para eso. Necesitarás Haskell para instalarlo. Solo:

$ cabal install splitter 

Y listo. Espero que este programa te sea útil.

Cuestiones relacionadas