文字列リストを使用してSQLパラメーターを置き換え、各置換ごとにファイル全体を印刷します。

文字列リストを使用してSQLパラメーターを置き換え、各置換ごとにファイル全体を印刷します。

単一の列に文字列値を含むtxtファイルがあります。

File.txt

A

B
.
.
.
Z

sql名前が変数であるスクリプトがあります'parameter'

script.sql

declare @var varchar(255)
set @var = 'parameter'
select * from table_name where column = @var
go

ファイルを1行ずつ読み込み、SQLのパラメータを各行に置き換え、sqlすべての文をファイルに印刷し、最終的にSQLを実行したいと思います。

perlORを使用したいのですが、python単純なシェルソリューションがある場合は大変感謝します。

たとえば、cat file.txt |sed "s/parameter/$0/" script.sql

たとえば、A予想される出力は次のとおりBです。

新しいファイル

declare @var varchar(255)
set @var = 'A'
select * from table_name where column = @var
go
declare @var varchar(255)
set @var = 'B'
select * from table_name where column = @var
go

ベストアンサー1

bashメソッドには、sedを呼び出すたびにトラップ(パフォーマンス損失)があります。

while read -r line;do
  sed -r "s/parameter/$line" script.sql >>newfile.sql
done <file.txt

別のバッシュ方法:

old="$(<script.sql)"
while read -r ln;do
echo "${old/parameter/$ln}" >>newfile.sql
done <file.txt

奇妙な方法:

awk 'NR==FNR{a[FNR]=$0;last=FNR;next}{for (i=1;i<=last;i++) \
print (a[i] ~ /^set @var/)?gensub(/parameter/,$0,"g",a[i]):a[i] >>"new.sql"}' script.sql file.txt

ここでオンラインテストをしてください(コード上の実行ボタンを押してください)

おすすめ記事