Прям порой надо такие штуки делать и время уходит не мало что бы отработать такой скрипт.
Есть файл с параметрами в виде пар NAME=VALUE.
Задача - если в этом файле уже есть определенные переменные с какими то значениями, то нужно им присвоить новые значения, а если таких переменных еще в файле нет - добавить их с уже новыми значениями.
Например, был такой файл с параметрами:
cat app.tfvars
appName = "app1"
appRepo = "ssh:git-repo@:name"
appBranch = "master"
Нужно при очередном прогоне заменять всегда ТРИ переменные
- appRepo
- appBranch
- appUser
(в примере только две нужные переменные уже есть , а третьей, appUser, еще нет).
Вот эти новые значения, которые мы как то получили в процессе (jenkins Job например их выставил)
--------------------------
APP_REPO="ssh:GIT"
APP_BRANCH="production"
APP_USER="kino505"
-------------------------
Хочу в один проход по файлу сделать две задачи сразу - заменить если есть такая переменная и добавить, если еще нет.
awk -v appRepo=${APP_REPO} -v appBranch=${APP_BRANCH} -v appUser=${APP_USER} '
BEGIN {FS = OFS = "=";
envVars["appRepo"]=appRepo;
envVars["appBranch"]=appBranch;
envVars["appUser"]=appUser;}
{gsub(/ /,"",$1)1; gsub(/ |\"/,"",$2)1} $1 in envVars {$2 = envVars[$1];delete envVars[$1]}
{print $1" "," \""$2"\""}
END { for(i in envVars) print i" "," \""envVars[i]"\"" }
' app.tfvars > tmp.file && mv tmp.file app.tfvars
После отработки итоговый файл:
appName = "app1" <-- p="" unchanged="">appRepo = "ssh:GIT" <--- p="" replaced="">appBranch = "production" <--- p="" replaced="">appUser = "kino505" <---- added="" because="" found="" not="" p="" string="">
PS: но было бы здорово если бы получилось бы передать ассоциативный массив в виде параметров в виде имя-значение (list of maps) в AWK. У меня не получилось. Может кто знает как?
Есть файл с параметрами в виде пар NAME=VALUE.
Задача - если в этом файле уже есть определенные переменные с какими то значениями, то нужно им присвоить новые значения, а если таких переменных еще в файле нет - добавить их с уже новыми значениями.
Например, был такой файл с параметрами:
cat app.tfvars
appName = "app1"
appRepo = "ssh:git-repo@:name"
appBranch = "master"
Нужно при очередном прогоне заменять всегда ТРИ переменные
- appRepo
- appBranch
- appUser
(в примере только две нужные переменные уже есть , а третьей, appUser, еще нет).
Вот эти новые значения, которые мы как то получили в процессе (jenkins Job например их выставил)
--------------------------
APP_REPO="ssh:GIT"
APP_BRANCH="production"
APP_USER="kino505"
-------------------------
Хочу в один проход по файлу сделать две задачи сразу - заменить если есть такая переменная и добавить, если еще нет.
awk -v appRepo=${APP_REPO} -v appBranch=${APP_BRANCH} -v appUser=${APP_USER} '
BEGIN {FS = OFS = "=";
envVars["appRepo"]=appRepo;
envVars["appBranch"]=appBranch;
envVars["appUser"]=appUser;}
{gsub(/ /,"",$1)1; gsub(/ |\"/,"",$2)1} $1 in envVars {$2 = envVars[$1];delete envVars[$1]}
{print $1" "," \""$2"\""}
END { for(i in envVars) print i" "," \""envVars[i]"\"" }
' app.tfvars > tmp.file && mv tmp.file app.tfvars
После отработки итоговый файл:
appName = "app1" <-- p="" unchanged="">appRepo = "ssh:GIT" <--- p="" replaced="">appBranch = "production" <--- p="" replaced="">appUser = "kino505" <---- added="" because="" found="" not="" p="" string="">
PS: но было бы здорово если бы получилось бы передать ассоциативный массив в виде параметров в виде имя-значение (list of maps) в AWK. У меня не получилось. Может кто знает как?
Комментариев нет:
Отправить комментарий