Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

awk組み込みの怪関数「gensub」

awk組み込みの「gensub」は
a GENeral SUBstitution function.
という事で、sub関数を拡張したような使いかたをします。
関数の引数は以下の通り。

gensub(regexp, replacement, how [, target])

*実際のところ
既存文字列を抽出し、並び替えて別の文を作る場合、以下のようにします。

BEGIN{
  a ="Hello, World"
  b = gensub(/(.+) (.+)/, "\\2 is over. \\1 You.", "G", a)
  print b
}

#>> World is over. Hello, You.

ここでの"G"、how引数は"g"、"G"自身やそれで始まる文字列を指定すると全部の文字が差し替え対象になります。
generalの略なんだそうです。

試しに、howを2とすると……2番目に一致する条件だけ置換されます。

$ echo a b c a b c | gawk ’{ print gensub(/a/, "AA", 2) }’
⊣ a b c AA b c

参考もと

  • effective awk