Cómo seguir / grep / awk los últimos N bytes de un archivo, en lugar de líneas


13

Tengo una aplicación que inicia sesión en un archivo de registro de texto sin formato (myapp.log) pero no parece estar escribiendo nuevos caracteres de línea al final de cada entrada de registro. Si ejecuto un comando como tail -n 50 myapp.logsi realmente recibiera cientos de "líneas" de texto (entradas de registro).

Este archivo de registro es muy grande, aproximadamente 1 GB, quién sabe hace cuánto tiempo se insertó el último CR y / o LF. ¿Cómo puedo decir, por ejemplo, los últimos 2 MB?

Respuestas:


26

Usando el -cconmutador (2MB = 2 * 1024 * 1024 = 2097152 bytes):

tail -c 2097152 myapp.log

Gracias a Petr Uzel por la sugerencia. Algunas implementaciones de cola permiten agregar una unidad para imprimir los últimos kilobytes (k) o megabytes (m), como:

tail -c 2m myapp.log

Sin embargo, tenga en cuenta que no es estándar (en ninguno de POSIX, UNIX (SUS) o Linux (LSB)) y no es portátil. También tenga en cuenta que, dado que los términos "mega" / "kilo" ... y sus abreviaturas (M, k ...) tienen significados ambiguos (1000 vs 1024), no hay mucha garantía de lo que tal o cual aplicación del tailsignificará por 2m(aunque las versiones actuales de las implementaciones actuales que lo soportan parecen ir a la variante 1024).


55
Tail debería poder aceptar números con unidades como argumento para el interruptor c, por lo tail -c 2M myapp.logque también debería funcionar.
Petr Uzel

@PetrUzel: Gracias. Editó la respuesta para agregarla.
Birei

Ahora me siento tonto :) Gracias por la rapidez, realmente aprecio eso. Gran sugerencia!
jwbensley

1
Perfecto, no estoy seguro de si esto ayudará, pero agregaré esta cadena de texto porque es lo que buscaba para llegar hasta aquí (tardó un buen rato): "datos del archivo cat entre dos posiciones de byte (no líneas) "
Torxed
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.