9月末に発売されたシェル芸本の続きです。日付変換系はいろんなテクニックやオプションが解説で見られて楽しいですねえ
前回はこちら
問題63
$ dateutils.dseq --format "%Y-%m %w" 2021-01-01 2021-12-31 | awk '$2==00{a[$1]++}END{for(k in a)if(a[k]==5)print k}' | sort 2021-01 2021-05 2021-08 2021-10
問題64
$ dateutils.dseq -s we-mo --format "%Y-%m %d" 2021-01-01 2021-12-31 | awk '{a[$1]=a[$1]","$2}END{for(k in a)print k""a[k]}' | sel -d, -D- 1 4 | sort 2021-01-19 2021-02-16 2021-03-16 2021-04-20 2021-05-18 2021-06-15 2021-07-20 2021-08-17 2021-09-21 2021-10-19 2021-11-16 2021-12-21
問題65
$ uconv -f sjis qdata/62/syukujitsu.csv | awk -F'[/|,]' '/2019/{printf "%d %02d %02d %s\n", $1,$2,$3,$4}' | cat - <(dateutils.dseq -s mo-fr 2019-01-01 2019-12-31 --format "%Y %m %d %a") | sd 'Sun' '日曜日' | sd 'Sat' '土曜日' | sort -k2,3 -u | sel -D- 1 2 | uniq -c 10 2019-01 9 2019-02 11 2019-03 10 2019-04 12 2019-05 10 2019-06 9 2019-07 10 2019-08 11 2019-09 10 2019-10 10 2019-11 9 2019-12
問題66
# 翌週の火曜日 dateutils.dseq 2017-01-01 2017-12-31 | dateutils.dgrep "%W=$(($(date -d 2017-09-18 +%W)+1))&&%w=02" 2017-09-26 # その翌週の金曜日 $ dateutils.dseq 2017-01-01 2017-12-31 | dateutils.dgrep "%W=$(($(date -d 2017-09-26 +%W)+1))&&%w=05" 2017-10-06 # その前日 date -d "2017-10-06 1 days ago" +%F 2017-10-05
問題67
$ cat qdata/67/dinner | teip -f1 -- date -f- +"%Y%m%d %a" | while read D A M; do echo "$D $M" >> $A;done