Bye Bye Moore

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

awkでEND部分の変数に+0をつける慣習について

人様の書いたawkスクリプトをみてると、時折END部分で変数に+0をつけるものがあったりします。
たとえば、こんな感じ。

$ cat data.csv | awk '/Saitama/{tot++} END{print tot+0}'
2

これは、awkの変数がjavascriptと同様かなり自由度が高いことと関係しています。

実際のところ

たとえばgawkだと良くした物で、数値の処理が優先されます。

$ gawk 'BEGIN{val = 9 + "a"; print val}'
9
$ gawk 'BEGIN{val = "a" + 9; print val}'
9

が、ここで万が一文字列が入ってしまった場合……当たり前ですが、文字列で上書きされます。

$ gawk 'BEGIN{val = "a"+9; val = "a"; print val}'
a

ここで冒頭の処理の通りゼロを足しこむという処理をやると……少なくとも0が表示されます。

$ gawk 'BEGIN{val = "a"+9; val = "a"; print val+0}'
0

この後にパイプ処理をつなげているなら、こういった一手間が結構効いてくるので気をつけてみると幸せになれます。