заменить все токены из файла конфигурации, используя файл свойств - PullRequest
0 голосов
/ 25 июня 2018

Может ли кто-нибудь помочь мне создать сценарий оболочки Unix для приведенного ниже сценария.

environment.properties:

KEY1=VALUE1
KEY2=VALUE2
KEY3=VALUE3
KEY4=VALUE4
KEY5=VALUE5
KEY6=VALUE6

input.txt:

sample file contains KEY1 
sample file contains KEY2 
sample file contains KEY3 
sample file contains KEY4 
sample file contains KEY5 

output.txt:

sample file contains VALUE1 
sample file contains VALUE2 
sample file contains VALUE3 
sample file contains VALUE4 
sample file contains VALUE5

Я хотел бы применить файл свойств к моему input.txt и хотел заменить все токены и сгенерировать выходной файл.

1 Ответ

0 голосов
/ 25 июня 2018

РЕДАКТИРОВАТЬ2: Добавление ответа готи сэр тоже здесь.

awk -F= 'NR==FNR{a[$1]=$2;next} {for(i in a){gsub(i,a[i])}} 1' mapfile inputfile

РЕДАКТИРОВАТЬ: В соответствии с предложением @ghoti sir нетрудно кодировать строку KEY номер поля здесь он будет искать строку и затем изменять ее.

awk 'FNR==NR{a[$1]=$2;next} {for(i=1;i<=NF;i++){if($i~/KEY[0-9]+/){$i=a[$i]}}} 1' FS="=" environment.properties  FS=" " input.txt

ИЛИ используя match функцию awk здесь.

awk '
FNR==NR{
  a[$1]=$2;
  next}
match($0,/KEY[0-9]+/){
   print substr($0,1,RSTART-1) a[substr($0,RSTART,RLENGTH)] substr($0,RSTART+RLENGTH);
   next
}
1' FS="=" environment.properties  FS=" " input.txt

Это задание для awk, не могли бы вы попробовать выполнить следующие действия и сообщить мне, поможет ли это вам.

awk 'FNR==NR{a[$1]=$2;next} {$NF=a[$NF]} 1' FS="=" environment.properties  FS=" " input.txt

Вывод будет следующим.

sample file contains VALUE1
sample file contains VALUE2
sample file contains VALUE3
sample file contains VALUE4
sample file contains VALUE5
...