Lo sé head
y tail
puedo tomar la -c
opción de especificar un desplazamiento de bytes. Estoy buscando una manera de extraer eficientemente un rango de bytes de un archivo de registro grande.
15
Lo sé head
y tail
puedo tomar la -c
opción de especificar un desplazamiento de bytes. Estoy buscando una manera de extraer eficientemente un rango de bytes de un archivo de registro grande.
¡El DareDevil de los comandos de Unix, dd
al rescate!
dd if=yourfile ibs=1 skip=200 count=100
Eso comenzaría desde el byte 200 y mostraría 100 bytes siguientes, o en otras palabras, bytes 200-300. ibs
significa que dd solo lee un byte a la vez en lugar de los 512 bytes predeterminados, pero aún escribe en fragmentos de 512 bytes predeterminados. Ve a ver si ibs
perjudica el rendimiento, espero que no.
time dd if=file.txt | wc -l
= 00: 00: 03s.time dd if=file.txt ibs=1 count=782090815 | wc -l
= 9:05:19Si su interés está en los bytes, sería
od
de mayor interés.Entonces, para leer los 16 bytes que comienzan en el byte 1024 y salen en ascii
fuente
Puede usar
dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks
(posiblemente conbs=1
para obtener bloques de un byte, de lo contrario, usa bloques de 512 bytes). Sin embargo, no estoy seguro de cuán eficiente es decirle que escriba un byte a la vez.fuente
dd
's pueden ser de tubo en cadena (el primero podría cortar el pedazo de grasa y la segunda haría buen trabajo sobre el tubo, no de disco), perodd
tiene no sólobs
pero separadoibs
yobs
, así, por lo que en menos podría salir con bloques más grandes que la lectura.Suponiendo que el archivo no es excesivamente grande (por ejemplo, varios GB o más), la canalización de uno a otro es tan eficiente como sea posible, salvo escribir su propio programa para hacerlo.
(O al revés. Lo que sea.)
fuente