Usage of gsub


厳密には gsub() の問題ではなく shell の問題になりますが、一行野郎で

$ echo 'a,b,c,d,e' | gawk '{gsub(/\,/,"'&'",$0);print $0}'

のようにしても

a','b','c','d','e

とならないというものです。
まさに「クォート地獄」なわけですが、回答として、

$ echo 'a,b,c,d,e' | gawk -v sq=\' 'gsub(/,/,sq"&"sq)'

というように -v オプションで対応させています。

'gsub(/,/,sq"&"sq)'

という部分は gsub() が置換に成功すると置換回数を返し、$0 を置換するため、

'{gsub(/,/,sq"&"sq);print}'

などとする必要もないわけです。

今回の問題に限らず、クォートが多くなると shell 解釈部分と awk の解釈部分が分かりにくくなるので、-v は非常に有効です。