使用awk基于模式将一个文件拆分为多个文件

时间:2017-04-10 17:20:55

标签: bash awk split

我有一个二进制文件,格式如下:

  

文件   04550525023506346054(....)6464563463634634634436346的 8badcafe 268664363463463463463463463464647(....)47401749741742的 8badcafe 34376362623626(....)262

我需要将它分成多个文件(使用awk),如下所示:

  

file1的
  045505250235063460546464563463634634634436346

     

file2的

     

8badcafe 26866436346346346346346346346464747401749741742

     

file3的

     

8badcafe 34376362623626262

我在stackoverflow上找到了以下行:

  

cat file |   awk -v RS =" \ x8b \ xad \ xca \ xfe" ' NR> 1 {print RS $ 0> "文件" (NR-1);关闭("文件"(NR-1))}'

它适用于所有文件,但第一个。 实际上,我没有创建我调用file1的文件,因为它不是从捕获器8badcafe开始的。 如何修复上一个命令行以获得我需要的输出? 谢谢!

1 个答案:

答案 0 :(得分:0)

尝试:

awk '{gsub(/8badcafe/,"\n&");num=split($0, a,"\n");for(i=1;i<=num;i++){print a[i] > "file"++e}}'  Input_file

替换字符串&#34; 8badcafe&#34;到一个新的行和字符串的值。然后将当前行拆分为名为a的数组,其字段分隔符为新行。然后在数组中遍历所有值并将它们逐个打印到file1,file2 ....和&#34; file&#34;以及一个名为e。

的递增计数变量

输出文件如下:

cat file1
045505250235063460546464563463634634634436346
cat file2
8badcafe26866436346346346346346346346464747401749741742
cat file3
8badcafe34376362623626262