Comando Linux para recuperar un rango de bytes de un archivo

15

Lo sé heady tailpuedo tomar la -copción de especificar un desplazamiento de bytes. Estoy buscando una manera de extraer eficientemente un rango de bytes de un archivo de registro grande.

Ramon
fuente

Respuestas:

17

¡El DareDevil de los comandos de Unix, ddal 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. ibssignifica 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 ibsperjudica el rendimiento, espero que no.

Janne Pikkarainen
fuente
Para un archivo de 782090815 bytes, obtuve estos tiempos: time dd if=file.txt | wc -l= 00: 00: 03s. time dd if=file.txt ibs=1 count=782090815 | wc -l= 9:05:19
Danilo Souza Morães
11

Si su interés está en los bytes, sería odde mayor interés.

-j, --skip-bytes=bytes
-N, --read-bytes=bytes

Entonces, para leer los 16 bytes que comienzan en el byte 1024 y salen en ascii

od -j 1024 -N 16 -a /bin/sh
Sirch
fuente
4

Puede usar dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(posiblemente con bs=1para 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.

DerfK
fuente
Bueno, si en cuestión respecto a la eficiencia - 2 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), pero ddtiene no sólo bspero separado ibsy obs, así, por lo que en menos podría salir con bloques más grandes que la lectura.
poige
1

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.

head ... file | tail ...

(O al revés. Lo que sea.)

Ignacio Vazquez-Abrams
fuente
1
la cola debe ir primero para grandes compensaciones, de lo contrario, se descarta el comienzo de la salida del cabezal.
proski