Question

Sur un poste de travail Linux (RHEL4), je souhaite extraire une plage d'octets (généralement moins de 1 000) à partir d'un fichier volumineux (> 1 gigaoctet). Je connais le décalage dans le fichier et la taille du bloc.

Je peux écrire du code pour le faire, mais existe-t-il une solution en ligne de commande?

Idéalement, quelque chose comme:

magicprogram --offset 102567 --size 253 < input.binary > output.binary
Était-ce utile?

La solution

Essayez dd :

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

Autres conseils

Ceci est une vieille question, mais j'aimerais ajouter une autre version de la commande dd qui convient mieux aux gros morceaux d'octets:

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

$ offset et $ octets sont des nombres en octets.

La différence avec la réponse acceptée de Thomas est que bs = 1 n'apparaît pas ici. bs = 1 définit la taille du bloc d'entrée et de sortie à 1 octet, ce qui le ralentit terriblement lorsque le nombre d'octets à extraire est important.

La commande dd peut faire tout cela. Examinez les paramètres de recherche et / ou de saut dans le cadre de l'appel.

tête + queue

Vous ne savez pas comment cela se compare à dd en termes d'efficacité, mais c'est amusant:

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

choisit 3 octets, en commençant par le deuxième:

234

Voir aussi: https://stackoverflow.com/a/1272995/895245

Encore plus vite

dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top