将大型二进制文件拆分为由上下文模式确定的部分

5 split files

我有一个大 (2GB) 文件,如下所示:

^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%^
<binary data>
^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%^ 
<binary data>
^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%^
<binary data>
...
Run Code Online (Sandbox Code Playgroud)

^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%^行是分隔符。二进制段很大。文件中大约有五十个。

我正在尝试提取此文件的二进制部分。每个二进制段都需要进入自己的文件。

我尝试使用csplit

csplit --digits=2 --prefix=out stu.ear '/\^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%\^/'
Run Code Online (Sandbox Code Playgroud)

但收到以下输出和两个out??文件,

1
2097951144
Run Code Online (Sandbox Code Playgroud)

是否有适合这项工作的工具(csplit也许是一种适用于二进制文件的实现?)

小智 5

我写了一个小python工具来做到这一点。https://github.com/mypalmike/csplitb

csplitb.py --prefix X --suffix Y --number Z XXXXXXXX input-file.extension
X = 输出文件开头的名称
Y = 所需的输出文件扩展名
Z = 用于区分输出文件的位数
XXXXXXXX =
要从输入文件中拆分出来的每个二进制文件的起始十六进制数input-file.extension = 正在拆分的文件

例子:
csplitb.py --prefix photo --suffix .png --number 4 89504e47 block-file.raw

输出:

photo0000.png
photo0001.png
photo0002.png
.............
Run Code Online (Sandbox Code Playgroud)


Raz*_*aza 3

以下将起作用:

      awk '/\^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%\^/{n++}{print >"out" n ".ear" }
Run Code Online (Sandbox Code Playgroud)