和名で記載されたクエリをDenodo用の物理名に置換する
X+和名+Y
↓
X+物理名+Y
Xはスペース、ピリオド
Yはスペース、カンマ、行末
-- 1. 変換定義ファイルの作成
タブ区切りで作成
vim a.txt
カラム1 "COL1"
カラム2 "COL2"
カラム3 "COL3"
カラム4 "COL4"
カラム5 "COL5"
カラム6 "COL6"
カラム7 "COL7"
テーブル1 B_TAB1
cat a.txt
-- 2. Bash
シェル本体: a.sh
変換定義ファイル: a.txt
クエリ: a.sql
SELECT
カラム1 ,
カラム2 ,
カラム3 ,
T1.カラム4 ,
カラム5
FROM テーブル1 T1
ORDER BY
カラム1,
カラム2,
カラム3
;
cat a.sql
vim a.sh
#!/bin/bash
OLDIFS=$IFS
IFS=$'\n'
for i in $(cat a.txt); do
bf=$(echo ${i} | awk '{print $1}')
af=$(echo ${i} | awk '{print $2}')
sed -i -E "s/([. ])(${bf})([,\r ]|$)/\1${af}\3/gi" a.sql
sed -i -E "s/([. ])(${bf})([,\r ]|$)/\1${af}\3/gi" a.sql
done
IFS=$OLDIFS
exit 0
--
cat a.sh
chmod +x a.sh
./a.sh
cat a.sql
-- 3. PowerShell
sudo curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
sudo yum install -y powershell
シェル本体: a.ps1
変換定義ファイル: a.txt
クエリ: a.sql
vim a.ps1
Write-Output $null > b.sql
foreach ($i in Get-Content a.sql) {
foreach ($k in Get-Content a.txt) {
$arr = $k.Split("`t")
$bf = $arr[0]
$af = $arr[1]
$i = $i -replace "([\. ])($bf)([, ]|$)", "`$1$af`$3"
$i = $i -replace "([\. ])($bf)([, ]|$)", "`$1$af`$3"
}
Write-Output $i >> b.sql
}
--
cat a.ps1
pwsh a.ps1
cat b.sql