grep特定值,使用awk从数据中用作文件名

时间:2018-09-28 15:14:06

标签: bash unix awk

我有一个数据如下的文件

 * sub : A
  111
 ------------------
 * sub : B
  222
 -------------------
 * sub : C
 333
 --------------------

我必须根据值“ -----------------”的结尾将此数据分为3个不同的文件。 我已经编写了用于分隔文件的代码。

但是,现在我必须像A,B,C一样取出在“ sub:”之后写的值名称,并在输出文件名中使用它。

我在下面编写的代码:

cat SAMP.txt | awk 'BEGIN{RS="-----+";i=1} {print $0>i".sql"}{i++}'

如何将其修改为sub的grep值,并在i中使用它,并将文件名设置为A.sql,B.sql和C.sql。

2 个答案:

答案 0 :(得分:4)

我想这就是你想要的...

$ awk -v RS='-----+' '{print > ($4".sql")}' file

这些更改可能会更强大

$ awk -F: 'NF>1 && !f {f=$NF".sql"} 
           /------+$/ {close(f); f=""; next} 
                      {print > f}' file

产生

$ head *.sql
==>  A.sql <==
 * sub : A
  111

==>  B.sql <==
 * sub : B
  222

==>  C.sql <==
 * sub : C
 333

答案 1 :(得分:-1)

执行此操作的另一种方法

from google.appengine.ext import ndb