Comando Linux per recuperare un intervallo di byte da un file


15

Lo so heade tailposso prendere l' -copzione per specificare un offset di byte. Sto cercando un modo per estrarre in modo efficiente un intervallo di byte da un file di registro di grandi dimensioni.

Risposte:


17

Il DareDevil dei comandi Unix, ddin soccorso!

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

Ciò inizierebbe dal byte 200 e mostrerebbe 100 byte successivi o, in altre parole, byte 200-300. ibssignifica che dd legge solo un byte alla volta anziché i 512 byte predefiniti, ma scrive ancora in blocchi predefiniti da 512 byte. Vai a vedere se ibsdanneggia la performance, spero di no.


Per un file di 782090815 byte, ho ottenuto questi tempi: 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

Se il tuo interesse è nei byte, sarebbe oddi maggiore interesse.

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

Quindi, per leggere i 16 byte a partire dal byte 1024, e l'output in ascii

od -j 1024 -N 16 -a /bin/sh

4

Puoi usare dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(possibilmente con bs=1per ottenere blocchi da un byte, altrimenti usa blocchi da 512 byte). Non sono sicuro di quanto sia efficace dirgli di scrivere un byte alla volta, però.


Bene, se preoccupato per l'efficienza - i 2 ddpossono essere incatenati insieme (il 1 ° potrebbe tagliare il pezzo grasso e il 2 farebbe un buon lavoro sul tubo, non sul disco), ma ddnon ha solo bsma separato ibse obspure, quindi a almeno potrebbe essere emesso con blocchi più grandi della lettura.
poige,

1

Supponendo che il file non sia eccessivamente grande (ad es. Diversi GB o giù di lì), il piping da uno all'altro è efficiente quanto si ottiene, a meno di scrivere il proprio programma per farlo.

head ... file | tail ...

(O viceversa. Qualunque sia.)


1
la coda dovrebbe andare prima per grandi offset, altrimenti l'inizio dell'uscita della testa viene scartato.
proski,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.