如何从文件中提取单个字节块?

时间:2009-09-14 19:08:56

标签: linux file split

在Linux桌面(RHEL4)上,我想从大文件(> 1 Gig)中提取一系列字节(通常小于1000)。我知道文件的偏移量和块的大小。

我可以编写代码来执行此操作但是有命令行解决方案吗?

理想情况下,如:

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

5 个答案:

答案 0 :(得分:90)

尝试dd

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

答案 1 :(得分:28)

这是一个老问题,但我想添加另一个版本的dd命令,它更适合大块字节:

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

其中$offset$bytes是以字节为单位的数字。

与托马斯接受的答案的不同之处在于bs=1未出现在此处。 bs=1生成的输入和输出块大小为1字节,这使得当提取的字节数很大时,它会非常慢。

答案 2 :(得分:3)

dd命令可以完成所有这些操作。查看搜索和/或跳过参数作为通话的一部分。

答案 3 :(得分:3)

head + tail

不确定效率与dd的比较,但很有趣:

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

从第二个开始选择3个字节:

234

另请参阅:https://stackoverflow.com/a/1272995/895245

答案 4 :(得分:1)

甚至更快

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