Use dd
para ler uma seção de um arquivo sem ler tudo que o precede.
Para o seu exemplo (lendo bytes 4,120,000-4,120,400) você pode usar
dd bs=400 skip=10300 count=1 if=your_input_file of=your_output_file
Isso define um tamanho de bloco lógico de 400 bytes,
e depois diz dd
para pular os primeiros 10300 "blocos lógicos" do arquivo de entrada ( if
).
10300 é 4,120,000 ÷ 400.
Em seguida, ele lê um bloco ( count=1
) de 400 bytes e o grava no arquivo de saída ( of
).
Se você omitir a especificação of
,
dd
irá escrever na saída padrão, então você pode canalizar para algo.
Se o ponto de partida (deslocamento) não for garantido
para ser um múltiplo inteiro do tamanho do bloco (ou mesmo se for),
você pode fazer coisas mais complicadas, como
(dd bs=10000 skip=412 count=0; dd bs=400 count=1 of=your_output_file) < your_input_file
ou
(dd bs=4120000 skip=1 count=0; dd bs=400 count=1 of=your_output_file) < your_input_file
onde
- Novamente, você pode omitir a especificação
of
e isso será gravado na saída padrão.
- Se você executar
dd
sem uma especificação if
, ele será lido na entrada padrão.
A entrada padrão para todo o grupo de comandos (dd …; dd …)
vem do < your_input_file
no final.
- O primeiro comando
dd
não lê nem grava dados, por causa do count=0
;
só procura.
- Como os dois comandos
dd
obtêm sua entrada padrão do mesmo redirecionamento de E / S,
a busca feita pelo primeiro irá afetar o ponteiro do arquivo que o segundo vê.