如何从 SQL 文件中一次提取一个查询?

如何从 SQL 文件中一次提取一个查询?

我正在尝试从 SQL 文件中一次提取一个查询。

这是我尝试过的

index1=1
index2=1
while read -n1 char; do
if [[ $char == ";" ]]
  then
     SUBSTRING=$(awk 'substr($index1,$index2)' sql1Temp.sql)
     echo $SUBSTRING 
    index1=$index2
fi 
((index2+=1))

done <sql1Temp.sql

我的 SQL 文件如下所示:

sql文件.sql

从测试1中选择*;

从测试2中选择*;

从测试3中选择*;

我得到这个结果:

wedtorque@wedtorque-VirtualBox:~/Desktop$ ./masterFile.sh
select *from test1; select *from test2; select *from test3;
select *from test1; select *from test2; select *from test3;
select *from test1; select *from test2; select *from test3;
wedtorque@wedtorque-VirtualBox:~/Desktop$

而我期待的是这样的事情:

wedtorque@wedtorque-VirtualBox:~/Desktop$ ./masterFile.sh
select *from test1;
select *from test1;
select *from test1;
wedtorque@wedtorque-VirtualBox:~/Desktop$

另外,当我回显内部 while 循环时,它每次从查询中获取$char时都会打印文件名; ETC$char*select *from test1

像这样的东西

wedtorque@wedtorque-VirtualBox:~/Desktop$ ./masterFile.sh
s
e
l
e
c
t

masterFile.sh sql1result.sql sql1.sql sql1Temp.sql sql2.sql Untitled Document
f
r
o
m

t
e
s
t
1
select *from test1; select *from test2; select *from test3;
;

答案1

不是 100% 确定你在做什么,但我会猜测一下。

.sql 文件,在我的测试用例中我将其命名为test.sql

select * from test1;
select * from test2;
select * from test3;

以及读取和回显该 sql 数据的脚本:

#!/bin/sh

# Get the raw sql data
RAW=`cat test.sql`

# We want to split the raw sql on a line return.
IFS="
"

# Echo out each line? Not sure if this is what you want.
for sql in $RAW
do
    echo "SQL line: [${sql}]"
done

exit

这将为您提供以下结果:

SQL line: [select * from test1;]
SQL line: [select * from test2;]
SQL line: [select * from test3;]

我认为你所缺少的就是那IFS部分。从man sh

IFS  Input Field Separators. This is normally set to ⟨space⟩, 
     ⟨tab⟩, and ⟨newline⟩.

相关内容