{Denodo}クエリ一括置換シェル

 

和名で記載されたクエリを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

 

vim a.sql

SELECT 
  カラム1 ,
  カラム2 ,
  カラム3 ,
  T1.カラム4 ,
  カラム5
FROM テーブル1 T1
ORDER BY
  カラム1,
  カラム2,
  カラム3
;


cat a.sql

nkf --overwrite -Lw 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