Use uma lista de strings para substituir um parâmetro sql que imprima o arquivo inteiro para cada substituição

1

Eu tenho um arquivo txt com valores de string em uma única coluna:

File.txt

A

B
.
.
.
Z

Eu tenho um script sql com uma variável chamada 'parameter' .

script.sql

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

Eu quero ler o arquivo linha por linha e usar cada linha para substituir o parâmetro no sql, imprimir todas as instruções sql em um arquivo (e, eventualmente, executar esse sql)

Estou aberto para usar perl ou python , mas uma solução simples seria muito apreciada.

Por exemplo algo como: cat file.txt |sed "s/parameter/$0/" script.sql

Saída esperada para, e. A e B :

NewFile

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
    
por user221826 20.03.2017 / 19:26

2 respostas

1

O caminho bash com a armadilha para chamar sed everytime (pena de performance se aplica):

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

outro caminho bash:

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

O caminho do awk:

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

teste do awk on-line aqui (pressione o botão executar acima do código)

    
por 20.03.2017 / 20:40
0
read -d '' -r SQL < script.sql
while IFS= read -r par; do printf '%s\n' "${SQL/\'parameter\'/\'$par\'}"; done < File.txt
    
por 21.03.2017 / 09:49