jqで土日を判定するみたいなことができる
isoの日付からfromdateでunixタイムスタンプへ変換しそれをgmtimeへ渡すと日時に関する配列が返ってくる
その中に曜日の情報も含まれている
よくある2020-08-01のような形式のテキストを判定してみる
$ echo '{"start_date": "2020-08-01"}'| jq '.start_date+"T00:00:00Z"'
"2020-08-01T00:00:00Z"
$ echo '{"start_date": "2020-08-01"}'| jq '.start_date+"T00:00:00Z"|fromdate'
1596240000
$ echo '{"start_date": "2020-08-01"}'| jq '.start_date+"T00:00:00Z"|fromdate|gmtime'
[
2020, # 年
7, # 月(0~)
1, # 日
0, # 時
0, # 分
0, # 秒
6, # 曜日
213 # 通年での日数
]
年、月(0~)、日、時、分、秒、曜日、通年での日数
といった感じで取得できるよう
日曜が0で土曜が6
休日と平日で集計する
試しに簡単な例を用意して集計してみる
- sample.json
$ cat sample.json
[
{"date": "2020-08-01", "time": 1},
{"date": "2020-08-02", "time": 1},
{"date": "2020-08-03", "time": 1},
{"date": "2020-08-04", "time": 1},
{"date": "2020-08-05", "time": 1},
{"date": "2020-08-06", "time": 1},
{"date": "2020-08-07", "time": 1},
{"date": "2020-08-08", "time": 1},
{"date": "2020-08-09", "time": 1},
{"date": "2020-08-10", "time": 1}
]
$ cat sample.json| jq 'reduce .[] as $row ({}; .[$row.date+"T00:00:00Z"|fromdate|gmtime|map(in([6,0]))|.[6]|tostring] += $row.time)'
{
"false": 6,
"true": 4
}
サンプルなのでここまで
falseは平日、trueは休日の合計ということになる