有人可以帮助我为以下情况构建一个UNIX shell脚本吗?
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,并希望替换所有标记并生成一个输出文件。
答案 0 :(得分:2)
EDIT2: 也在此处添加了ghoti先生的答案。
awk -F= 'NR==FNR{a[$1]=$2;next} {for(i in a){gsub(i,a[i])}} 1' mapfile inputfile
编辑: 根据@ghoti先生的建议,此处不对字符串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
的{{1}}函数。
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