データを扱う際に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
※上記コードは見やすくするために改行を行っているため、{ }と異なるような見え方になっている
以上