Respostas:
O DareDevil do Unix comanda, dd
para 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. ibs
significa 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 ibs
prejudica o desempenho, espero que não.
Você pode usar dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks
(possivelmente com bs=1
para 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.
dd
podem 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 dd
não apenas bs
mas separado ibs
e obs
também, por isso, em pelo menos, poderia produzir com blocos maiores que a leitura.
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.)
time dd if=file.txt | wc -l
= 00: 00: 03s.time dd if=file.txt ibs=1 count=782090815 | wc -l
= 9:05:19