日付
ツール
データ分析

日付をループするコマンド

データ分析やバッチ処理などをしていると、ある日からある日まで日付を辿りながらコマンドを実行したい時がよくあります。

シェルコマンドのワンライナーなら以下のような感じで書けます。

for i in {0..9}; do date -I -d "2017-11-28 + $i day"; done | xargs -I{} ./run-script {}

単純な場合はこれで十分ですが、例えば月曜日だけ実行したいとか、2017-03-03から2017-05-05までを実行したいけど間に何日あるかわからんとか、ちょっと困る場面もあります。

そんな時にちょっとだけ便利なコマンドを作ったので紹介してみます。

https://github.com/ojima-h/diter

インストール

バイナリをダウンロードするだけです。

curl -L https://github.com/ojima-h/diter/releases/download/v1.0.0/diter-1.0.0.linux-amd64 > diter
chmod +x diter

使い方

./diter START_DATE END_DATE で、START_DATE から END_DATE までの日付を標準出力に流します。

$ diter 2016-01-01 2016-01-03
2016-01-01
2016-01-02
2016-01-03

第三引数以降にコマンドを実行すると、その期間の日付で繰り返しコマンドを実行します。

$ diter 2016-01-01 2016-01-03 -- echo date={}
date=2016-01-01
date=2016-01-02
date=2016-01-03

月曜日だけ実行したいなら --wday=1

$ diter 2016-01-01 2016-01-31 --wday=1
2016-01-04
2016-01-11
2016-01-18
2016-01-25

その他、逆順での列挙とか日付フォーマットの指定とか月1での実行などができます。
詳しくは README を参照してください。