문자열 목록을 사용하여 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

파일을 한 줄씩 읽고 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

여기서 온라인 테스트를 해보세요(코드 위의 실행버튼을 눌러주세요)

답변2

read -d '' -r SQL < script.sql
while IFS= read -r par; do printf '%s\n' "${SQL/\'parameter\'/\'$par\'}"; done < File.txt

관련 정보