如何根据模式拆分二进制文件?

fre*_*bie 5 unix awk

我想根据模式“xÚ”(十六进制为 78 DA)将二进制文件拆分为较小的文件,因此当文件中有“xÚ”时,拆分器脚本会将内容拆分并粘贴到新文件中,直到另一个 '可以找到 xÚ'。新创建的文件应以“xÚ”开头。

FreeBSD awk, grep,sh首选。

mat*_*ull 2

编辑:

好的,这是清理混乱的过程:

awk 'BEGIN { RS=""; FS=/\x78\xda/ } { for (i = 1; i <= NF; i++) print $i > i }' YOUR_BIN_FILE
Run Code Online (Sandbox Code Playgroud)

空 RS 仍然可能会导致意外结果,因为它会在空行处生成 awk 单独的记录。事实上,很难避免将文件分割成记录。解决此问题的一种方法是将记录分隔符设置为文件中不存在的某种模式。另一种方法是以 78da 分隔记录并处理每条记录。

  • 你可以`echo "78da$i" | xxd ...`。您不需要“cat”:“xxd -ps -c $FILESIZE $MY_BINARY”。您可能需要在 awk 中将 `RS` 设置为 null,以防止它在 `\x0a` 上分裂:`BEGIN {RS=""}`。如果使用 `printf` 来格式化文件名,则可以更轻松地重新组装文件: `outfile=$(printf "outfile.%04d" $COUNT)` (文件名将类似于“outfile.0001”)。您不需要重定向“xxd -r”的输出:“xxd -r -ps -c $FILESIZE - $outfile”。 (3认同)