Я пытаюсь извлечь по одному запросу из файла 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 файл выглядит так:
sqlFile.sql
select * from test1;
select * from test2;
select * from test3;
В результате я получаю следующее:
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$
Также, когда я повторяю $ char
внутри цикла while, он печатает имена файлов каждый раз, когда $ char
получает *
] из запросов, выберите * из 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;
;
Не уверен на 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⟩.