ver una primeras para otro lineas linea leer las fichero extraer copiar contenido contar comando cantidad archivo shell unix sed text-files head

shell - primeras - extraer una linea de un archivo en linux



¿Cómo limito(o trunco) el archivo de texto por número de líneas? (2)

Truncamiento en el lugar

Para truncar el archivo in situ con sed, puede hacer lo siguiente:

sed -i ''50001,$ d'' filename

  • -i significa en su lugar.
  • d significa eliminar.
  • 50001,$ significa las líneas desde 50001 hasta el final.

Puede hacer una copia de seguridad del archivo agregando un argumento de extensión a -i , por ejemplo, .backup o .bak :

sed -i.backup ''50001,$ d'' filename

En OS-X o FreeBSD debe proporcionar un argumento para -i - para hacer esto mientras evita hacer una copia de seguridad:

sed -i '''' ''50001,$ d'' filename

La versión de nombre de argumento largo es la siguiente, con y sin el argumento de copia de seguridad:

sed --in-place ''50001,$ d'' filename sed --in-place=.backup ''50001,$ d'' filename

Archivo nuevo

Para crear un nuevo archivo truncado, simplemente redirija de la cabecera al nuevo archivo:

head -n50000 oldfilename > newfilename

  • -n50000 significa el número de líneas, la cabeza por defecto es 10.
  • > significa redirigir, sobrescribir cualquier otra cosa que pueda estar allí.
  • Sustituya >> por > si quiere agregar al nuevo archivo.

Es lamentable que no pueda redireccionar al mismo archivo, por lo que sed se recomienda para el truncamiento en el sitio.

No sed? ¡Prueba Python!

Esto es un poco más tipeo que sed. Después de todo, Sed es la abreviatura de "Stream Editor", y esa es otra razón para usarlo, para lo que la herramienta es adecuada.

Esto fue probado en Linux y Windows con Python 3:

from collections import deque from itertools import islice def truncate(filename, lines): with open(filename, ''r+'') as f: blackhole = deque((),0).extend file_iterator = iter(f.readline, '''') blackhole(islice(file_iterator, lines)) f.truncate(f.tell())

Para explicar el Python:

El agujero negro funciona como /dev/null . Es un método de límite consolidado en un deque con maxlen=0 , que es la manera más rápida de agotar un iterador en Python (que yo sepa).

No podemos simplemente iterar sobre el objeto de archivo porque el método tell estaría bloqueado, entonces necesitamos el iter(f.readline, '''') .

Esta función demuestra el administrador de contexto, pero es un poco superfluo ya que Python cerraría el archivo al salir de la función. El uso es simple:

>>> truncate(''filename'', 50000)

Me gustaría utilizar un terminal / shell para truncar o limitar de otro modo un archivo de texto a un cierto número de líneas.

Tengo un directorio completo de archivos de texto, para cada uno de los cuales solo son útiles las primeras ~ 50k líneas.

¿Cómo borro todas las líneas más de 50000?


Muy fácil usar sed:

sed -n ''1,50000 p'' filename

Esto solo imprimirá las líneas 1 a 50000 en el archivo ''nombre de archivo''.