Domanda

Su un desktop Linux (RHEL4) voglio estrarre un intervallo di byte (in genere inferiore a 1000) all'interno di un file di grandi dimensioni (> 1 Gig). Conosco l'offset nel file e le dimensioni del blocco.

Posso scrivere codice per fare questo, ma esiste una soluzione da riga di comando?

Idealmente, qualcosa del tipo:

magicprogram --offset 102567 --size 253 < input.binary > output.binary
È stato utile?

Soluzione

Prova dd :

dd skip=102567 count=253 if=input.binary of=output.binary bs=1

Altri suggerimenti

Questa è una vecchia domanda, ma vorrei aggiungere un'altra versione del comando dd che è più adatto per grandi blocchi di byte:

dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes 

dove $ offset e $ bytes sono numeri in unità di byte.

La differenza con la risposta accettata da Thomas è che bs = 1 non appare qui. bs = 1 produce la dimensione del blocco di input e output di 1 byte, il che rende terribilmente lento quando il numero di byte da estrarre è grande.

Il comando dd può fare tutto questo. Guarda i parametri seek e / o skip come parte della chiamata.

head + tail

Non sono sicuro di come si paragona a dd in termini di efficienza, ma è divertente:

printf "123456789" | tail -c+2 | head -c3

seleziona 3 byte, a partire dal secondo:

234

Vedi anche: https://stackoverflow.com/a/1272995/895245

Ancora più veloce

dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top