Как извлечь один кусок байтов из файла?
Вопрос
На рабочем столе Linux (RHEL4) я хочу извлечь диапазон байтов (обычно меньше 1000) из большого файла (> 1 гигабайт). Я знаю смещение в файле и размер фрагмента.
Я могу написать код для этого, но есть ли решение для командной строки?
В идеале, что-то вроде:
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 байту, что делает его ужасно медленным, когда количество извлекаемых байтов велико.
Команда dd может сделать все это. Посмотрите на параметры поиска и / или пропуска как часть вызова.
head
+ tail
Не уверен, насколько он эффективен по сравнению с dd
, но это весело:
printf "123456789" | tail -c+2 | head -c3
выбирает 3 байта, начиная со второго:
234
См. также: https://stackoverflow.com/a/1272995/895245
Еще быстрее
dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary