読者です 読者をやめる 読者になる 読者になる

長生村本郷Engineers'Blog

千葉県長生村本郷育ちのエンジニアが書いているブログ

awk で CSV の特定列を整形 〜数値を文字列扱いする〜

概要

ある顧客データを抽出してレポートしたい、というときに
CSVファイルで "090" などと携帯電話があると ExcelCSVファイルを開いたときに
"90" になってしまうということがあるかと思います。

f:id:kenzo0107:20160328190207p:plain

そんなときの為に特定列のみ数値を文字列扱いにしたときの内容まとめです。

Excelで数値を文字列扱いするには

"090" 

とあったとすると

="090" 

のように整形することで文字列扱いになります。

例)

"デミスハサビス",="09099999999","DeepMind"

整形してみる

  • 例)以下のような tmp.csv があるとします。
"デミスハサビス","09099999999","DeepMind"
"いとうせいこう","08088888888","エムパイヤ・スネーク・ビルディング"
  • 2つ目のカラムのみ =を左端に追加します
    ※"(ダブルクォテーション)で囲まれた値の左側に「=」を追加します。
    ※あえて分かりやすく $1, $2, $3 の項目を明示的に指定してみました。
$ awk -F ',' '{print $1 ",="$2","$3}' tmp.csv
"デミスハサビス",="09099999999","DeepMind"
"いとうせいこう",="08088888888","エムパイヤ・スネーク・ビルディング"

上記のように 「=」 が追加されました。

  • 出力先を指定
$ awk -F ',' '{print $1 ",="$2","$3}' tmp.csv > output.csv
$ cat output.csv
"デミスハサビス",="09099999999","DeepMind"
"いとうせいこう",="08088888888","エムパイヤ・スネーク・ビルディング"

output.csvExcelで開いてみます。

f:id:kenzo0107:20160328190448p:plain

できました♪

おまけ

Excelを開く際、Windowsではデフォルト SJISなので文字コードがUTF8の場合、文字化けします。
以下CSVファイルをSJIS文字コード変換します。

$ nkf -sLw output.csv > output_sjis.csv

以上です。