我有一个大 (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)
以下将起作用:
awk '/\^%%-=-=-=-=-=-=-=-=-=-=-=-=-=-%%\^/{n++}{print >"out" n ".ear" }
Run Code Online (Sandbox Code Playgroud)