先日出席したシェル芸勉強会で、処理の途中で一年分(というか、指定期間)の日付をdateコマンドで出力させる必要があった。
で、日単位であれば以下のようにコマンドを実行することで、一覧として出力可能だ。
echo '2016/01/01\ +'{0..365}'\ days' | LANG=C xargs -n1 date -d
わかりやすいかどうかわからないけど、解説。
dateコマンドの-d(--date)オプションでは、以下のように"日付 + ○ (days|month)"などのように、日付を計算させることが出来るのだ。
例えば、「2016/01/01 + 1 month」とすると…
[root@test-node ~]# date -d '2016/01/01 + 1 month'
2016年 2月 1日 月曜日 00:00:00 JST
と、このように1ヶ月後の日付を取得できるのだ。
つまり、-dでこのように"計算"できるようにechoで渡す事で、指定した日から○○日間(-で前の日付も出来る)の日付だけを出力させることが出来る。
[root@test-node ~]# echo '2016/01/01\ +'{0..13}'\ days' | LANG=C xargs -n1 date -d
Fri Jan 1 00:00:00 JST 2016
Sat Jan 2 00:00:00 JST 2016
Sun Jan 3 00:00:00 JST 2016
Mon Jan 4 00:00:00 JST 2016
Tue Jan 5 00:00:00 JST 2016
Wed Jan 6 00:00:00 JST 2016
Thu Jan 7 00:00:00 JST 2016
Fri Jan 8 00:00:00 JST 2016
Sat Jan 9 00:00:00 JST 2016
Sun Jan 10 00:00:00 JST 2016
Mon Jan 11 00:00:00 JST 2016
Tue Jan 12 00:00:00 JST 2016
Wed Jan 13 00:00:00 JST 2016
Thu Jan 14 00:00:00 JST 2016