😡
内閣府が配布している国民の祝日の CSV ファイルをいい感じに加工するシェルスクリプト
国民の祝日の CSV ファイル
- ここから入手できる
- 今日 (2023/12/06) 現在、1955 年から 2024 年の祝日が記載されている
スクリプトの中身
- 出力フォーマットは TypeScript ファイルにコピペできるような形式になっている
# syukujitsu.csv から ts の配列の中身を生成する
# YEAR に入れた年の祝日だけを抽出する
# syukujitsu.csv のフォーマットは以下
# 2024/1/1,元日
# 出力するフォーマットは以下
# { year: 2024, month: 1, date: 1, name: '元日' },
YEAR=2024
# ディレクトリ移動
cd `dirname $0`
# Shift-JIS から UTF-8 に変換
nkf -w ./syukujitsu.csv | \
# 改行コードを LF に変換
tr -d '\r' | \
# 1行目を削除
sed -e '1d' | \
# 年月日を抽出 -> 2024/1/1 元日
awk -F, '{print $1,$2}' | \
# 年月日をスラッシュで分割 -> 2024 1 1 元日
awk -F/ '{print $1,$2,$3}' | \
# 年月日と祝日名を出力 -> { year: 2024, month: 1, date: 1, name: '元日' },
awk '{print "{ year: "$1", month: "$2", date: "$3", name: '\''"$4"'\'' },"}' | \
# 年でフィルタ
grep $YEAR
ポイント
-
syukujitsu.csv
の文字コードは Shift JIS なのでnkf
コマンドで UTF-8 に変換している 😡- Mac なら
brew install nkf
で入る
- Mac なら
# Shift-JIS から UTF-8 に変換
nkf -w ./syukujitsu.csv
-
syukujitsu.csv
の改行コードは CRLF なのでtr
コマンドで LF に変換している 😡
# 改行コードを LF に変換
tr -d '\r'
余談
- このスクリプトはコメントだけ自分で書き、あとは GitHub Copilot に書かせようとした
- 文字コードの問題は、出力が文字化けしているのですぐに自力解決できた
- 改行コードの問題は原因がすぐには分からず VSCode 拡張の Copilot Chat に聞いたが解決できなかった
- 出力形式がこんな感じなので改行コードっぽいということがわかり、
tr
コマンドで解決した
- 出力形式がこんな感じなので改行コードっぽいということがわかり、
' },ar: 2024, month: 1, day: 1, name: ' 元日
' },ar: 2024, month: 1, day: 8, name: ' 成人の日
' },ar: 2024, month: 2, day: 11, name: ' 建国記念の日
...
- 後で知ったが、国民の祝日の CSV は「ひどい CSV」として有名らしい
Discussion