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
Essayez dd
:
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
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
où $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.
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.
Même plus vite
dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary