Разбор SQL - Bash - PullRequest
       1

Разбор SQL - Bash

0 голосов
/ 13 февраля 2019

У меня есть определенное требование разбора текста файла типа SQL, ниже приведены подробности.

Огромный запрос:

select
col A,
col B,
.
.
from
(select * from db1.table1 where conditions) t1
left outer join
(select * from db2.table2 where conditions) t2
on table1.col1 = table2.col1
left outer join
(select * from db3.table3 where conditions) t3
on table2.col1 = table3.col3

И запрос может продолжаться следующим образом,Я пытался разобрать и изменить запрос в определенном формате, как показано ниже:

select
    col A,
    col B,
    .
    .
    from
    PH1 t1
    left outer join
    PH2 t2
    on table1.col1 = table2.col1
    left outer join
    PH3 t3
    on table2.col1 = table3.col3

Заполнители (PH), я хочу поместить в другой отдельный файл;Я буду называть их здесь в SQL (и это не проблема).

Я пытаюсь разобрать в bash и действительно не уверен, как заменить внутренние запросы на выборку заполнителями.Первая половина запроса (выше первой FROM) может быть разделена на sed -n '/^SELECT/,/^FROM/p'.

Я как-то не в состоянии сформулировать логику о том, как поступить с другой половиной требования.

Есть идеи?

1 Ответ

0 голосов
/ 13 февраля 2019

Использование awk.Это что-то вроде этого:

$ awk -v RS="" '{                # read until first empty line or end
    gsub(/\([^)]*\)/,"PH" ++n)   # replace (..) with PHn
    gsub(/\r?\n/,"&    ")        # newlines with newline and space
}1' file                         # output

Вывод:

select
    col A,
    col B,
    .
    .
    from
    PH1 t1
    left outer join
    PH1 t2
    on table1.col1 = table2.col1
    left outer join
    PH1 t3
    on table2.col1 = table3.col3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...