awkで置換するといえば組み込み関数のsub関数やgsub関数だが、これらはawk内で代入した変数の置換をするような使い方ができない($0で受けた内容すべてに対しての置換はできる)。
定義した変数や特定の列に対してのみ置換をする場合は、gensub関数を利用するとよいだろう。
gensub("置換前","置換後",置換位置(NUM)[,置換対象文字列(列や変数名など)])
実際に利用する場合については、以下の例を参考にするとよいだろう。
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt aaa="1" bbb="2" ccc="3" ddd="4" aaa="11" bbb="21" ccc="31" ddd="41" aaa="12" bbb="22" ccc="32" bbb="3rqt" ddd="42" aaa="13" bbb="23" ccc="33" ddd="43" aaa="14" bbb="24" ccc="34" ddd="44" aaa="15" bbb="25" ccc="35" ddd="45" aaa="16" bbb="26" ccc="36" ddd="46" aaa="17" bbb="27" ccc="37" ddd="47" aaa="18" bbb="28" ccc="38" ddd="48" [root@BS-PUB-CENT7-01 ~]# # 列を指定せずにaaaをhhhに置換する [root@BS-PUB-CENT7-01 ~]# awk '{print gensub("aaa","hhh",1)}' /tmp/test.txt hhh="1" bbb="2" ccc="3" ddd="4" hhh="11" bbb="21" ccc="31" ddd="41" hhh="12" bbb="22" ccc="32" bbb="3rqt" ddd="42" hhh="13" bbb="23" ccc="33" ddd="43" hhh="14" bbb="24" ccc="34" ddd="44" hhh="15" bbb="25" ccc="35" ddd="45" hhh="16" bbb="26" ccc="36" ddd="46" hhh="17" bbb="27" ccc="37" ddd="47" hhh="18" bbb="28" ccc="38" ddd="48" [root@BS-PUB-CENT7-01 ~]# # 列を指定(1列目)してaaaをhhhに置換する [root@BS-PUB-CENT7-01 ~]# awk '{print gensub("aaa","hhh",1,$1)}' /tmp/test.txt hhh="1" hhh="11" hhh="12" hhh="13" hhh="14" hhh="15" hhh="16" hhh="17" hhh="18" [root@BS-PUB-CENT7-01 ~]# # 1つ目にヒットしたaをhに置換する [root@BS-PUB-CENT7-01 ~]# awk '{print gensub("a","h",1,$1)}' /tmp/test.txt haa="1" haa="11" haa="12" haa="13" haa="14" haa="15" haa="16" haa="17" haa="18" [root@BS-PUB-CENT7-01 ~]# # 2つ目にヒットしたaをhに置換する [root@BS-PUB-CENT7-01 ~]# awk '{print gensub("a","h",2,$1)}' /tmp/test.txt aha="1" aha="11" aha="12" aha="13" aha="14" aha="15" aha="16" aha="17" aha="18"