我有一个字典dict
,其中记录由“:”分隔,数据字段由新行分隔,例如:
:one
1
:two
2
:three
3
:four
4
现在我希望 awk 替换input
文件中每条记录的所有出现,例如
onetwotwotwoone
two
threetwoone
four
我的第一个 awk 脚本看起来像这样并且工作得很好:
BEGIN { RS = ":" ; FS = "\n"}
NR == FNR {
rep[$1] = $2
next
}
{
for (key in rep)
grub(key,rep[key])
print
}
给我:
12221
2
321
4
不幸的是,另一个 dict 文件包含一些正则表达式使用的字符,所以我必须在我的脚本中替换转义字符。通过将 key 和 rep[key] 移动到一个字符串中(然后可以解析转义字符),脚本将只替换字典中的第二条记录。为什么?以及如何解决?
这是脚本的当前第二部分:
{
for (key in rep)
orig=key
trans=rep[key]
gsub(/[\]\[^$.*?+{}\\()|]/, "\\\\&", orig)
gsub(orig,trans)
print
}
所有脚本都由awk -f translate.awk dict input
提前致谢!