如何拆分二进制分隔的二进制文件?

时间:2015-11-26 04:16:17

标签: awk

我正在尝试用二进制分隔符拆分二进制文件......但awk对我不满意......有人碰巧知道我做错了什么?

awk '/\x7c\x7c/{n++}{print >"out" n ".bin" }' input.bin

这导致:

awk: syntax error at source line 1
 context is
    /\x7c\x7c/{n++}{print >"out" >>>  n <<<  ".bin" }
awk: illegal statement at source line 1

分隔符为||,十六进制为7c 7c。根据awk文档,awk应为\x7c\x7c

我也试过这个:

awk 'BEGIN { RS=""; FS=/\x7c\x7c/ } { for (i = 1; i <= NF; i++) print $i > i }' input.bin

导致文件数量正确,但缺少部分数据。拆分文件的总文件大小小于原始文件(从2.2KB源文件总共108个字节)。所以绝对不对。

2 个答案:

答案 0 :(得分:0)

这很简单,只需将文件名包装在()

awk '/\x7c\x7c/{n++}{print > ( "out" n ".bin" ) }' input 

括号是必需的,因为awk没有任何显式连接运算符。因此,我们需要告诉awk必须连接从()的任何内容。

有关详细信息,请参阅 string concatenations in awk

答案 1 :(得分:0)

以下通过设置“记录分隔符”进行拆分,因此应该适用于非常大的文件(假设“记录”不是太大):

awk 'BEGIN{ FS="\x00"; RS="\\|\\|"; n=0; }
     { n++; print >> "out" n ".bin" }'