как извлечь определенные байты из файла с помощью unix

Как извлечь 12-байтовые куски из двоичного файла в определенных позициях внутри файла.

Если бы я хотел извлечь первые 12 байтов, я мог бы сделать что-то вроде

head -c12 file.bin>output

Если бы я хотел извлечь 12 байт из byte61, я мог бы сделать что-то вроде

head -c72 file.bin|tail -c12 >output

есть ли более простой способ, если у меня есть что-то вроде 20 12-байтовых кусков, которые мне нужно извлечь

спасибо

2 ответов


использовать dd:

dd bs=1 seek=60 count=12 if=file.bin of=output

вы можете написать цикл оболочки для замены чисел.

вы также можете рассмотреть возможность использования awk, Perl или Python, если их много, или это должно быть очень быстро.


использование xxd:

xxd -p -seek 3d -l 12 file.bin > output

3d означает 61 в шестнадцатеричном

использование hexdump:

hexdump -ve '16/1 "%0.2x " "\n"' -s 3d -n 12 file.bin > output