単一の列に文字列値を含む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を実行したいと思います。
perl
ORを使用したいのですが、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
ここでオンラインテストをしてください(コード上の実行ボタンを押してください)
答え2
read -d '' -r SQL < script.sql
while IFS= read -r par; do printf '%s\n' "${SQL/\'parameter\'/\'$par\'}"; done < File.txt