Используйте список строк, чтобы заменить параметр 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)

Я открыт для использования perl или 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 

2 Solutions collect form web for “Используйте список строк, чтобы заменить параметр sql, распечатывающий весь файл для каждой замены”

Способ 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:

 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 

awk test онлайн здесь (нажмите кнопку выполнения над кодом)

 read -d '' -r SQL < script.sql while IFS= read -r par; do printf '%s\n' "${SQL/\'parameter\'/\'$par\'}"; done < File.txt 
  • Unix для нескольких переменных цикла
  • Передача нескольких varibles скрипту для SQL-запроса
  • Ошибка при запуске скрипта PL / SQL
  • Отличный способ SQL-запроса нескольких CSV-файлов?
  • как разделить буферизацию на меньшие файлы csv
  • Исключение переменных bash перед их сохранением в базе данных hive apache
  • Преобразование операторов XML в SQL INSERT с использованием командной строки
  • SQLPLUS с циклами сценариев оболочки
  • Добавление разрывов между каждыми двумя словами в bash
  • Переменная Unix, не способная хранить вывод sql-запроса
  • Сложная команда sed с AND / OR / NOT
  • Linux и Unix - лучшая ОС в мире.