web-dev-qa-db-fra.com

Comment extraire un seul bloc d'octets d'un fichier?

Sur un bureau Linux (RHEL4), je veux extraire une plage d'octets (généralement moins de 1000) à partir d'un gros fichier (> 1 Gig). Je connais le décalage dans le fichier et la taille du morceau.

Je peux écrire du code pour ce 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
61
DanM

Essayez dd:

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

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

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

$offset et $bytes sont des nombres en unités d'octets.

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

31
ChronoTrigger

head -c + tail -c

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

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

prend 3 octets, en commençant par le 2ème:

234

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

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

3
Joe

Même plus vite

dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary 
1
Albert Burbea