Macでawkのstrftimeを使う(awk: calling undefined function strftime)
Macでawkを使ったところ、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'