如何在UNIX中使用分隔符从文件中提取一组行



我在一个平面文件中有以下3个查询。我想将3个查询分别拆分为3个文件。每个查询用";"分隔。"(半结肠)。请建议我该怎么做?

输入文件: query.sql

select * from 
DBNAME.table1;
select * from 
DBNAME.table2
;
select * from 
DBNAME.table3
WHERE date<= current_date-30;

输出应为

query1 . sql

file1:

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

相关内容

  • 没有找到相关文章

最新更新