awk で CSV の特定列を整形 〜数値を文字列扱いする〜
概要
ある顧客データを抽出してレポートしたい、というときに
CSV ファイルで “090” などと携帯電話があると Excel で CSV ファイルを開いたときに
“90” になってしまうということがあるかと思います。
そんなときの為に特定列のみ数値を文字列扱いにしたときの内容まとめです。
Excel で数値を文字列扱いするには
1 | "090" |
とあったとすると
1 | ="090" |
のように整形することで文字列扱いになります。
例)
1 | "デミスハサビス",="09099999999","DeepMind" |
整形してみる
- 例)以下のような tmp.csv があるとします。
1 | "デミスハサビス","09099999999","DeepMind" |
- 2 つ目のカラムのみ =を左端に追加します
※”(ダブルクォテーション)で囲まれた値の左側に「=」を追加します。
※あえて分かりやすく $1, $2, $3 の項目を明示的に指定してみました。
1 | $ awk -F ',' '{print $1 ",="$2","$3}' tmp.csv |
上記のように 「=」 が追加されました。
- 出力先を指定
1 | $ awk -F ',' '{print $1 ",="$2","$3}' tmp.csv > output.csv |
output.csv を Excel で開いてみます。
できました ♪
おまけ
Excel を開く際、Windows ではデフォルト SJIS なので文字コードが UTF8 の場合、文字化けします。
以下 CSV ファイルを SJIS に文字コード変換します。
1 | $ nkf -sLw output.csv > output_sjis.csv |
以上です。