需要在UNIX中使用SED或AWK命令解决此问题的解决方案。
我有一个源文件,其值必须填充如下。 (必须从参考文件中获取值并更新源文件)。
源文件:
aaaa
Uid=xxxx
pwd=nnnn
bbbb
uid=yyyy
pwd=eeee
cccc
uid=zzzz
pwd=kkkk
参考文件:
block, parameter, value
aaaa, uid, 1a1a
aaaa, pwd, 1b1b
bbbb, uid, 2a2a
bbbb, pwd, 2b2b
cccc, uid, 3a3a
cccc, pwd, 3b3b
输出文件:
aaaa
Uid=1a1a
pwd=1b1b
bbbb
uid=2a2a
pwd=2b2b
cccc
uid=3a3a
pwd=3b3b
要求:
对于aaaa,SED必须在第1行和第3行中搜索Uid并替换“=”之后的值。即,xxxx与1a1a。
对于bbbb,SED必须在第5行和第7行中搜索Uid并替换“=”之后的值。也就是说,yyyy和2a2a。
与其他参数类似。
感谢。
答案 0 :(得分:2)
sed用于单个行上的简单替换。对于任何其他文本操作,您应该使用awk:
$ cat tst.awk
BEGIN { FS = "[,[:space:]=]+" }
NR==FNR {
if (NR>1) {
map[$1,$2] = $3
}
next
}
{
if (NF==1) {
key = $0
}
else {
$0 = $1 "=" map[key,tolower($1)]
}
print
}
$ awk -f tst.awk ref.txt src.txt
aaaa
Uid=1a1a
pwd=1b1b
bbbb
uid=2a2a
pwd=2b2b
cccc
uid=3a3a
pwd=3b3b