はじめに
以下記事ではUNIX系OSにて一連の日付を「yyyymmdd」形式で出力するワンライナーを解説しました。
本記事ではそこに条件を加えて第二土曜日(カレンダーにおいてその月の2回目の土曜日)を取得するワンライナーを説明します。
コマンド実行状況
$ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ date --version date (GNU coreutils) 8.26
ワンライナー
$ seq 0 365 | sed 's/^/20200101 /' | sed 's/$/ days/' | date -f - '+%Y%m%d %w' | awk '/6$/{print $1}' | awk '++x[substr($0,0,6)]==2'
結果は以下
20200111 20200208 20200314 20200411 20200509 20200613 20200711 20200808 20200912 20201010 20201114 20201212
以下、補足です。
補足
dateコマンドの-d "XXXXXXXX 1 days"
の記法によって指定日から任意の日付だけずらして表示するオプションを利用し、そこに%w
を付与して曜日情報を書き出します。
cronのルールと同じく、日曜日が0から始まり土曜日は6で終わるので末尾が6で終わる行の1列目を取り出します。
awk '/6$/{print $1}'
あとは先頭の6文字で連想配列を行うことで月毎に集計し、2番目の出現回数を以下で出力すれば
awk '++x[substr($0,0,6)]==2'
第二土曜日が取得できます。
以上、ご参考になれば幸いです。