Bye Bye Moore

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

AWKにもstrtime関数がある。ただし、timeライブラリと合わせてつかう。

Ruby等々の軽量言語でもお馴染み、時刻を返すstrftime関数、AWKにもちゃんとあります。
使い方に一手間かかりますが、あとの使い勝手はなんら変わりません。

実際のところ

strftime関数を呼び出すだけなら、ライブラリ不要です。
ただし、そのまんま呼び出しても

$ gawk '"BEGIN {the_time = strftime("%c",now); print the_time}'
木  1/ 1 09:00:00 1970

てな感じでUNIXタイムの開始時点の値しか出してくれません。
意味のある時間にしたい場合、UNIXタイムを渡す必要があります。

というわけで、実用上は標準添付のtimeライブラリにあるgettimeofday()をつかいます。
実際やると、以下の通り。

$ gawk '@load "time"; BEGIN {the_time = strftime("%c", gettimeofday()); print the_time}'
水 10/14 00:01:41 2015

特殊変数の対応関係も、軽量言語の奴と大体同じです。*1
とはいえ、Rubyとは微妙に挙動が違うものもあります。
たとえば、Rubyでは月の名前を返す%B、AWKでは月の情報しか返しません。

$ gawk 'BEGIN {the_time = strftime("%B",now); print the_time}'
1月

と、細かい違いこそあるものの知ってると車輪の再発明だのUNIXコマンドとのパイプ芸だのをしないで済みます。

*1:というか、軽量言語の方がAWKを見習っていると思われますが