Awk 多模式替换

Awk 多模式替换,awk,Awk,使用AWK,我想处理以下文本: #replace count 12 in in #replace in 77 main() {printf("%d",count+in); } 进入: 当发生“#replace”声明时,只有它下面的代码受影响。我有: /#replace/ { co=$2; czym=$3 } !/#replace/ { gsub(co,czym); print } 然而,我得到的只是 in in ma77() {pr77tf("%d",count+77); } 作为回报

使用AWK,我想处理以下文本:

#replace count 12
in in
  #replace in 77
main()
{printf("%d",count+in);
}
进入:

当发生“#replace”声明时,只有它下面的代码受影响。我有:

/#replace/ { co=$2; czym=$3 }
!/#replace/ { gsub(co,czym); print }
然而,我得到的只是

in in
ma77()
{pr77tf("%d",count+77);
}

作为回报。正如您所看到的,只有第二个gsub起作用。有没有一个简单的方法来记住所有的替换

您只需要使用数组来存储替换:

$ awk '/#replace/{a[$2]=$3;next}{for(k in a)gsub(k,a[k])}1' file
in in
ma77()
{pr77tf("%d",12+77);
}
$ awk '/#replace/{a[$2]=$3;next}{for(k in a)gsub(k,a[k])}1' file
in in
ma77()
{pr77tf("%d",12+77);
}