Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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を見習っていると思われますが