Comment extraire un seul bloc d'octets à partir d'un fichier?
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
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
où $ 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