Tips

csvファイルの処理で使えるLinuxコマンドまとめ

データを扱う際にcsvファイルを処理することが多々あると思います。
手作業で1つずつファイルを開いて、、なんてしてると時間もかかるし面倒。。
そんな時はLinuxコマンドでやってしまいましょう。

以下でcsvファイルを処理する場合に使えるLinuxコマンドをいくつかご紹介します。

0. 作業用フォルダの作成

作業日ごとにフォルダを作成したい!そんな時は次のコマンドで、実行日のフォルダを作成できます。
毎回日付を手動で指定する必要もないです。実行するとYYYYMMDDのフォルダが作成されます。

mkdir `date '+%Y%m%d'`

 

1. ファイル名の変更

mv 変更前のファイル名 変更したいファイル名
例) 0.で作成した作業日フォルダ内のtest.csvをdata.csvに変更

mv ./`date '+%Y%m%d'`/test.csv ./`date '+%Y%m%d'`/data.csv

 

2. csvファイルの形式変更

a. 文字コード変換(UTF-8 BOM付き / UTF-8)

(UTF-8 BOM付き -> UTF-8)
vi -c ‘set nobomb’ -c ‘wq!’ ファイル名
例) data.csvをBOM付きからUTF-8に変更

vi -c 'set nobomb' -c 'wq!' ./`date '+%Y%m%d'`/data.csv


(UTF-8 -> UTF-8 BOM付き)

vi -c ‘set bomb’ -c ‘wq!’ ファイル名
例) data.csvをUTF-8からBOM付きに変更

vi -c 'set bomb' -c 'wq!' ./`date '+%Y%m%d'`/data.csv

 

b. 改行コード変換(CRLF / LF)

(LF -> CRLF)
sed -i ‘s/$/\r/g’ ファイル名
例) data.csvをLFからCRLFに変更

sed -i 's/$/\r/g' data.csv


(CRLF -> LF)
sed -i ‘s/\r//g’ ファイル名
例) data.csvをCRLFからLFに変更

sed -i 's/\r//g' data.csv

 

3. 1つのファイルを同じ行数で分割

split -l 行数指定 分割したいファイル名 分割後のファイル名
例) data.csvを1000行ごとに分け、data_00.csv, data_01.csv,……に分割

split -l 1000 -d ./`date '+%Y%m%d'`/data.csv ./`date '+%Y%m%d'`/data_ --additional-suffix=.csv

※-dオプション:分割後の指定したファイル名に連番で2桁の数字をつけてくれる
※–additional-suffix=.csv:拡張子csvをつけてくれる

4. 2つのファイルを1つにまとめる

(それぞれのファイルに同じラベルが付いていることを想定)
{cat 結合したいファイル名1; sed ‘1d’ 結合したいファイル名2; } > 結合後のファイル名
例) data1.csvとラベルを削除したdate2.csvを結合し、data_merge.csvとして生成
単なる結合ではなく、ラベルが不要なdata2.csvにおいてsedコマンドで1行目のラベルを削除し、data1.csvに結合していることがポイント

{ \
  cat ./`date '+%Y%m%d'`/data1.csv; \
  sed '1d' ./`date '+%Y%m%d'`/data2.csv; \
} > ./`date '+%Y%m%d'`/data_merge.csv

※上記コードは見やすくするために改行を行っているため、{  }と異なるような見え方になっている

以上

Madoka
平日は頭を動かし、休日は身体を動かす、Snow Manが好きな自由人。ダンスとバク転を特訓中。