Macでawkのstrftimeを使う(awk: calling undefined function strftime)

Macawkを使ったところ、strftime関数実行時に 「awk: calling undefined function strftime」というエラーがでた。

  • 調査

stackoverflowをみると、mac標準のawkでは無く、gawk使えと書いてある。

osx - Awk strftime on Mac OS X - Stack Overflow

  • gawkインストール

brewでインストールした。 (/usr/local/binにコマンドがインストールされたことを確認)

$ which awk
/usr/bin/awk   * Mac OS標準のawk
$ brew install gawk
$ which awk
/usr/local/bin/awk

が、改善しない。

$ awk 'BEGIN{now=strftime("%D", systime()); print now}'
awk: calling undefined function strftime
 source line number 1

明示的にgawkを指定した場合はOK...

$ gawk 'BEGIN{now=strftime("%D", systime()); print now}'
11/30/14

どうやらパスが違うらしい。

$ ls -l /usr/local/bin/awk
lrwxr-xr-x  1 edo  staff  28 11 30 06:46 /usr/local/bin/awk -> ../Cellar/gawk/4.1.1/bin/awk
$ which gawk
/usr/local/bin/gawk
$ ls -l /usr/local/bin/gawk
lrwxr-xr-x  1 edo  staff  29 11 30 06:46 /usr/local/bin/gawk -> ../Cellar/gawk/4.1.1/bin/gawk

awkコマンド指定時に、gawkを利用したいのでシンボリックリンクの向き先を変更したがNG

$ rm -i /usr/local/bin/awk
remove /usr/local/bin/awk? y
$ ln -si /usr/local/bin/gawk /usr/local/bin/awk
$ ls -l /usr/local/bin/awk
lrwxr-xr-x  1 edo  staff  19 11 30 06:50 /usr/local/bin/awk -> /usr/local/bin/gawk
$ awk 'BEGIN{now=strftime("%D", systime()); print now}'
awk: calling undefined function strftime
 source line number 1

シンボリックリンクを"/usr/local/bin/gawk"ではなく、gawkリンク元に向けたらOK

$ ln -si /usr/local/Cellar/gawk/4.1.1/bin/gawk /usr/local/bin/awk
$ awk 'BEGIN{now=strftime("%D", systime()); print now}'
11/30/14

ただ、これだとバージョンアップした時に厳しいので、aliasに入れて回避した。

alias awk='gawk'