Как извлечь один кусок байтов из файла?

На рабочем столе Linux (RHEL4) я хочу извлечь диапазон байтов (обычно менее 1000) из большого файла ( > 1 Gig). Я знаю смещение в файле и размер куска.

Я могу написать код для этого, но есть ли решение командной строки?

В идеале, что-то вроде:

magicprogram --offset 102567 --size 253 < input.binary > output.binary

Ответ 1

Попробуйте dd:

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

Ответ 2

Это старый вопрос, но я хотел бы добавить еще одну версию команды dd, которая лучше подходит для больших фрагментов байтов:

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

где $offset и $bytes - числа в байтовых единицах.

Разница с соглашением Томаса заключается в том, что bs=1 здесь не отображается. bs=1 создает размер входного и выходного блоков как 1 байт, что делает его очень медленным, когда количество извлекаемых байтов велико.

Ответ 3

head -c + tail -c

Не уверен, как это сравнить с dd по эффективности, но это весело:

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

выбирает 3 байта, начиная со второго:

234

Смотрите также: fooobar.com/questions/31183/...

Ответ 4

Команда dd может выполнить все это. Посмотрите параметры поиска и/или пропуска в качестве части вызова.

Ответ 5

Даже быстрее

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