たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

シェル芸160ノック13

9月末に発売されたシェル芸本の続きです。日付変換系はいろんなテクニックやオプションが解説で見られて楽しいですねえ

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題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