我在一个平面文件中有以下3个查询。我想将3个查询分别拆分为3个文件。每个查询用";"分隔。"(半结肠)。请建议我该怎么做?
输入文件: query.sql
select * from
DBNAME.table1;
select * from
DBNAME.table2
;
select * from
DBNAME.table3
WHERE date<= current_date-30;
输出应为
query1 . sqlfile1:
select * from
DBNAME.table1;
file2: query2.sql
select * from
DBNAME.table2
;
file3: query3.sql
select * from
DBNAME.table3
WHERE date<= current_date-30;
可以这样写:
awk -v RS="" '{print > "query"(++i)".sql"}' file
对于-v RS=""
,我们将每个记录定义为一个段落。然后就是把它们印到queryNUMBER.sql
上的问题了。为了做到这一点,我们使用每次递增的++i
。
参见创建的文件:
$ cat query1.sql
select * from
DBNAME.table1;
$ cat query2.sql
select * from
DBNAME.table2
;
$ cat query3.sql
select * from
DBNAME.table3
WHERE date<= current_date-30;
您可以使用这些sed命令来获取每一组行,并将它们发送到正确的文件。第一个sed命令获取第1行和第2行,并将它们发送给query1.sql。第二个sed命令获取第4行到第6行,并将它们发送给query2.sql。第三个sed命令获取第8行到第10行,并将它们发送给query3.sql。
#!/bin/sh
sed -n '1,2p' query.sql > query1.sql
sed -n '4,6p' query.sql > query2.sql
sed -n '8,10p' query.sql > query3.sql