gawk で後方参照

仮に以下の Perl の一行野郎が後方参照を用いた置換であるとします。

$ echo 'aaa:111' | perl -e 'while(<STDIN>) { if(/^(.+):(\d+)/) { print $1,$2; }}'
aaa111

gawk には後方参照を使った置換関数 gensub() 関数があるので、以下のように書くことができます。

$ echo 'aaa:111' | awk '{print gensub(/^(.+):([0-9]+)/,"\\1\\2",1,$0)}'
aaa111

ただし、もしも区切りを変更したいというような意味であれば、以下のように書くこともできます。

$ echo 'aaa:111' | awk -F: -v OFS="" '$1=$1'
aaa111

少し説明が必要かも知れませんが、$1=$1 で $0 の再構築をするというものです。慣れないと使いにくいかもしれません。

いやもっと素直に以下のように書けるかもしれません。

$ echo 'aaa:111' | awk 'sub(/:/,"")'
aaa111

Perl で $1, $2 を用いていることから後方参照を使うという意味では最初のものが解でしょう。

tag_gawk.pngtag_gawk.png