我有一个文件master.sql包含许多创建表ddl的。
master.sql
CREATE TABLE customers (
customer_id numeric(38) GENERATED BY DEFAULT AS IDENTITY,
email_address varchar(255) NOT NULL,
full_name varchar(255) NOT NULL
) ;
CREATE TABLE inventory (
inventory_id numeric(38) GENERATED BY DEFAULT AS IDENTITY,
store_id numeric(38) NOT NULL,
product_id numeric(38) NOT NULL,
product_inventory numeric(38) NOT NULL
) ;
我想把这个文件拆分成单独的文件,每个文件对应一个表,为此我使用rubin's解决方案here。
下面是我使用的awk命令。
awk '/CREATE TABLE/{f=0 ;n++; print >(file=n); close(n-1)} f{ print > file}; /CREATE TABLE/{f=1}' master.sql
执行awk命令时生成带有表计数但没有任何扩展名的文件。尝试使用此article联系
当创建每个sql文件时,我想将文件名改为表名。
例如:
- customers.sql
- inventory.sql
我正在尝试使用awk命令从master.sql中获取表名在master.sql迭代过程中是否可以获取表名
有什么办法吗?
3条答案
按热度按时间w8ntj3qf1#
嗨,您可以使用类似以下的内容:
X1 M0 N1 X块将通过使用X1 M1 N1 X字符作为记录分隔符来将输入拆分成SQL语句(而不是行)。
如果该行将
CREATE TABLE
与基于第三个字段(表名)的文件名匹配,则可以打印语句内容注意:如果存在任何包含
;
的sql注解,这可能不会很好地工作。编辑以关闭文件(参见@ed-morton的评论)
hc2pp10m2#
下面是一个简单的两步过程:
qgzx9mmu3#
你使用的awk命令对于你正在做的事情来说太复杂了。它所需要的只是:
而对于您的新需求,它只是一个调整: