pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


日付から曜日を求めるワンライナーを awkで

ウェブサイトにイベントの告知記事を書くときに、過去の記事を書き換えて流用しようとすると、日付は書き換えたけど曜日を書き換え忘れていたり、あるいは間違えて書いてしまったり、ということがあります。そういう間違いをチェックするのに日付とカレンダーを付き合わせても良いのだけれど、どうせなら何かのロジックで処理したい。

さて、曜日の計算を汎用的に行うにはツェラーの公式を使うのが基本ですけど、それだと処理が冗長になります。そんなことをせずとも、指定した日付に対応する曜日を取得する処理をカレンダー関連のコマンドや関数で取得する方がシンプルです。

そこで awk で日付文字列をパースしつつ、mktimeで内部形式(unix秒)に変換したのち、strftime で曜日だけ取得するように書いてみました。

awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'

そうするとこんなふうに利用できます。

$ echo 2017/05/18 | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
Thu
$ echo '2017年5月18日' | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
Thu
$ awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
2017年 5月 18日
Thu
2017/5/18
Thu

日本語で表示してほしいなら LANG=ja_JP.UTF8 しておけばOKですね。

$ export LANG=ja_JP.UTF8
$ echo 2017/05/18 | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
木