Comando Linux para recuperar um intervalo de bytes de um arquivo

15

Eu sei disso heade tailpode -coptar por especificar um deslocamento de bytes. Estou procurando uma maneira de extrair eficientemente um intervalo de bytes de um arquivo de log grande.

Ramon
fonte

Respostas:

17

O DareDevil do Unix comanda, ddpara o resgate!

dd if=yourfile ibs=1 skip=200 count=100

Isso começaria do byte 200 e mostraria 100 próximos bytes, ou seja, bytes 200-300. ibssignifica que o dd lê apenas um byte por vez, em vez dos 512 bytes padrão, mas ainda grava em pedaços de 512 bytes padrão. Vá e veja se ibsprejudica o desempenho, espero que não.

Janne Pikkarainen
fonte
Para um arquivo de 782090815 bytes, recebi estes horários: 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
11

Se o seu interesse estiver nos bytes, seria odde maior interesse.

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

Então, para ler os 16 bytes a partir do byte 1024, e a saída em ascii

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

Você pode usar dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(possivelmente com bs=1para obter blocos de um byte, caso contrário, ele usa blocos de 512 bytes). Porém, não tenho certeza de quão eficiente é dizer a ele para escrever um byte de cada vez.

DerfK
fonte
Bem, se estiver preocupado com a eficiência - os dois ddpodem ser encadeados (o primeiro pode cortar a peça gorda e o segundo faria um bom trabalho sobre o tubo, não no disco), mas ddnão apenas bsmas separado ibse obstambém, por isso, em pelo menos, poderia produzir com blocos maiores que a leitura.
poige
1

Assumindo que o arquivo não seja excessivamente grande (por exemplo, vários GB ou mais), a canalização de um para o outro é a mais eficiente possível, além de escrever seu próprio programa para isso.

head ... file | tail ...

(Ou o contrário. Qualquer que seja.)

Ignacio Vazquez-Abrams
fonte
1
a cauda deve ir primeiro para compensações grandes, caso contrário, o início da saída da cabeça é descartado.
proski