bash シェルスクリプトでCSVの空データに文字列を設定
以下のようなCSVのデータが空だったときに「hoge」を入れたい。 毎回エクセルを起動して編集するのが面倒だったため、bashでシェルスクリプトを作成した。
member.csv
id, name, kana AAAA,一郎,イチロー BBBB,, CCCC,三郎,サブロー
対応は以下 update_hoge.sh
#!/bin/bash sed -e 's/,,/,hoge,hoge/g' member.csv | \ sed -e 's/^/"/g' | \ sed -e 's/,/","/g' | \ sed -e 's/$/",/g' > member_hoge.csv
説明
最初はfor分を使ったが、2万件程度のデータ処理に時間が掛かった為却下した。
結局のところsedを使って置換するのが一番早かったので、このような対応となった。
空データに「hoge」を入れる場合sed -e 's/,,/,hoge,hoge/g' member.csv
のみで良いが、出力結果のCSVはデータをダブルクォーテーションで囲いたかったので、他のsedはダブルクォーテーションを付ける処理になっている。このあたりは雑なので綺麗な書き方があると思う。
まとめ
簡単な正規表現が使えるなら、CSVの編集するときは常にシェルスクリプト化を視野に入れても良いかもしれない。
いま、私は数年間無駄をしてきたと後悔している。