首页 > 解决方案 > grep 特定值用作使用 awk 的数据中的文件名

问题描述

我有一个包含如下数据的文件

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

我必须根据值“-----------------”的结尾将这些数据分成 3 个不同的文件。我已经编写了代码来分隔文件。

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

我在下面写的代码:

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

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

标签: bashunixawk

解决方案


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

$ 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

推荐阅读