Ответ 1
Попробуйте dd
:
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
На рабочем столе Linux (RHEL4) я хочу извлечь диапазон байтов (обычно менее 1000) из большого файла ( > 1 Gig). Я знаю смещение в файле и размер куска.
Я могу написать код для этого, но есть ли решение командной строки?
В идеале, что-то вроде:
magicprogram --offset 102567 --size 253 < input.binary > output.binary
Попробуйте dd
:
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
Это старый вопрос, но я хотел бы добавить еще одну версию команды dd
, которая лучше подходит для больших фрагментов байтов:
dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes
где $offset
и $bytes
- числа в байтовых единицах.
Разница с соглашением Томаса заключается в том, что bs=1
здесь не отображается. bs=1
создает размер входного и выходного блоков как 1 байт, что делает его очень медленным, когда количество извлекаемых байтов велико.
head -c
+ tail -c
Не уверен, как это сравнить с dd
по эффективности, но это весело:
printf "123456789" | tail -c+2 | head -c3
выбирает 3 байта, начиная со второго:
234
Смотрите также: fooobar.com/questions/31183/...
Команда dd может выполнить все это. Посмотрите параметры поиска и/или пропуска в качестве части вызова.
Даже быстрее
dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary