あくだま - LDLコレステロール -

動脈硬化と戦うブログです。

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の編集するときは常にシェルスクリプト化を視野に入れても良いかもしれない。

いま、私は数年間無駄をしてきたと後悔している。