단일 열에 문자열 값이 포함된 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을 실행하고 싶습니다.
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