在Linux桌面(RHEL4)上,我想从大文件(> 1 Gig)中提取一定范围的字节(通常小于1000)。我知道文件的偏移量和块的大小。
我可以编写代码来执行此操作,但是有命令行解决方案吗?
理想的情况是:
magicprogram --offset 102567 --size 253 < input.binary > output.binary
Answers:
尝试dd
:
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
dd if=in.bin bs=1 status=none skip=$((0x88)) count=$((0x80)) of=out.bin
。
这是一个老问题,但是我想添加另一个版本的dd
命令,该版本更适合大块字节:
dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes
其中$offset
和$bytes
是数字,以字节为单位。
与Thomas接受的答案的不同之处在于,bs=1
此处没有出现。bs=1
产生的输入和输出块大小为1个字节,这在要提取的字节数较大时会非常慢。
iflag
是未知的操作数,没有它,您将得到整个块。
dd
可用于iflag
支持(brew install coreutils
)。注意:默认情况下,实用程序安装时带有g
前缀(例如gdd
代替dd
)
head -c
+ tail -c
不确定dd
效率如何,但是很有趣:
printf "123456789" | tail -c+2 | head -c3
从第二个开始选择3个字节:
234
printf '\x01\x02' > f
和hd
。
status=none
以禁止输出到stderr。