Gato Unix a partir de la línea


40

¿Cuál es la mejor manera de generar un archivo a partir de una línea específica (un gran número como 70000)? Algo como:

cat --line=70000 <file>

Respuestas:


60

Eche un vistazo a la cola, más precisamente, es --lines = + N switch:

tail --lines=+100 <file>

Guau. ¡No sabía esto incluso después de usar esto en Linux durante 8 años! Siempre usé un bash fn! Gracias ! getFromLine () {lineno = wc -l $1 | awk '{print $1}'; lineno = expr $lineno - $2; cola -n $ lineno $ 1; }
secureBadshah

2
Como nota, esto no funciona en Mountain Lion (Darwin Kernel Versión 13.1.0). La variante para Mountain lion estail -n
Kaushik Ghose

22

La forma más obvia es tail. La sintaxis puede ser ligeramente diferente según el sistema operativo que esté utilizando:

tail -n +70000

Si no puede ir taila trabajar, puede usarlo sed, pero puede terminar más lento:

sed -pe '1,69999d'

tailfuncionó bien en MinGW (en un archivo de texto de 600 MB). El tiempo de ejecución fue de solo unos segundos (pero el archivo de entrada podría haber estado en el caché de archivos ya).
Peter Mortensen

2

Si en lugar de un número de línea necesita comenzar a enumerar en la línea que contiene un determinado $phrase, intente lo siguiente.

more -1000 +/"$phrase" yourfilename | sed '1,4d'

El -1000 enumerará continuamente el texto de hasta 1000 líneas; puede cambiar esto según sea necesario. El sedcomando cortará las primeras 4 líneas de salida, que fueron insertadas automáticamente por more, que contiene una línea en blanco, el mensaje "... omitiendo" y las dos líneas que preceden a la línea de inicio deseada. Supongo que esto puede variar dependiendo de su sistema.


2

Puede usar el parámetro NR con el comando awk :

cat <file> | awk '{if (NR>=7000) print}'

2
Puede usar este comando con otros límites. Como muestra: cat messages | awk '{if (NR>=7000 && NR <7003) print}'muestra solo las filas 7000, 7001 y 7002.
Gefolge

-1

2
enlace fascinante, pero en realidad no proporciona ninguna información que se aplique a esta pregunta, y su tailsugerencia es la misma que la aceptada y otras respuestas de hace semanas. ¿Por qué molestarse en publicar?
quack quijote

El enlace está roto -...can't find the server at www.scripterworld.com.
Peter Mortensen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.