Awk 使用Shell脚本从文件中读取SQL语句块的更好方法是什么?

Awk 使用Shell脚本从文件中读取SQL语句块的更好方法是什么?,awk,sed,sql-parser,Awk,Sed,Sql Parser,我有一个像下面这样的文件,其中有许多SQL语句。我希望在需要时读取特定的SQL块 MyFile.SQL #QUERY1 SET ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF SET VERIFY OFF SET NUMFORMAT 99999999999999999 Select max(time_created) from test.table1 where cust=1; EXIT; #QUERY2 SET

我有一个像下面这样的文件,其中有许多SQL语句。我希望在需要时读取特定的SQL块

MyFile.SQL

#QUERY1
SET ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
SET VERIFY OFF
SET NUMFORMAT 99999999999999999
Select max(time_created) from test.table1 where cust=1;
EXIT;

#QUERY2
SET ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
SET VERIFY OFF
SET NUMFORMAT 99999999999999999
Select count(*) from test.table1 where cust=1;
EXIT;


#QUERY3
SET ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
SET VERIFY OFF
SET NUMFORMAT 99999999999999999
Select count(*) from test.table12 where acct=1;

EXIT;
我正在使用下面的命令

x=$(cat test.sql )
echo $x | awk -F'COUNT_QUERY' '{ print $0 }'

有人能帮你找到一些好的方法吗?

你能试着用GNU awk编写并测试下面的示例吗

说明:增加对以上内容的详细说明

awk '                 ##Starting awk program from here.
/^#QUERY2/{           ##Checking condition if line starts with #QUERY2 then do following.
  found=1             ##Setting found value as 1 here.
}
found;                ##Checking condition if found is SET then print that line.
/^EXIT/ && found{     ##Checking condition if line starts with EXIT and found is SET then do following.
  exit                ##exit from program from here.
}
'  Input_file         ##Mentioning Input_file name here.

像您这样的数据,记录之间用空行分隔,这就是为什么awk有一个段落模式,通过将RS设置为null激活:

$ awk -v RS= '/^#QUERY2\n/' file
#QUERY2
SET ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
SET VERIFY OFF
SET NUMFORMAT 99999999999999999
Select count(*) from test.table1 where cust=1;
EXIT;

查看RS设置为空字符串的时间。。。有关更多信息,请在中。

能否请您将预期输出的示例添加到您的帖子中,并让我们知道,然后再让我们知道。@RavinderSingh13:如果我只想提取查询2,则我的预期输出应为查询2设置回显新建0 SPA 0页面0馈送取消顶部修剪打开制表符取消设置验证取消设置NUMFORMAT 999999999999选择计数*表1中,cust=1;退出@1stenjoydmoment,它检查行中是否有QUERY2,然后从该行打印以退出,所以文件中是否存在字符串QUERY2?是。它起作用了。谢谢你的指点。我的坏消息是我带着另一个文件跑了。请为我提供GNU awk中显示的示例的文档链接understanding@1stenjoydmoment,我已经为上面的内容和学习awk添加了详细的解释,您可以使用它,它有很好的学习信息。
$ awk -v RS= '/^#QUERY2\n/' file
#QUERY2
SET ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
SET VERIFY OFF
SET NUMFORMAT 99999999999999999
Select count(*) from test.table1 where cust=1;
EXIT;