シェルスクリプトでCSVファイルを読み込み、データを整形する機会があったため忘備録として記録に残そうと思います。
想定データ
カンマ区切りのデータを想定します。
1234,test1
5678,test2
9101,test3
スクリプトファイル
CSVファイルのデータを一行ずつ読み込み、必要な処理を書いていきます。
#!/bin/bash
# 読み込むファイル
FILE=test.csv
while read line || [ -n "${line}" ];
do
# lineに対して必要な処理を書く
done < ${FILE}
注意点1
最初は以下のように書いていましたが、ある時CSVファイルの最終行が読み込まれていないことに気づきました。
これは最終行に改行文字が付いていないと読み込まれないことが原因のようで、次の行が空行じゃない場合は読み込むように条件を追加しました。
# 条件なし
while read line;
do
done
# 条件あり
while read line || [ -n "${line}" ];
do
done
注意点2
データを読み込んで処理をしている中で、どうしてかうまくいかない時がありました。
そういう時は一度 vim -b <file name>
でデータを開いてみましょう。
想定外のデータ(今回の場合はBOMを想定)が入っている可能性があります。
下記の場合は<feff>
を削除して保存します。
<feff>1234,test1^M
5678,test2^M
9101,test3^M
注意点3
注意点2と似た内容ですが、^M
の削除の仕方を書きます。
vim -b <file name>
で開きます。
そして、vimで:%s/^M//g
というコマンドを実行します。
この時、 ^M
は[Ctrl+V],[Ctrl+M]を順番に押下することで入力できます。
上記コマンドを実行することで、全置換で一度に^M
を削除することができます。
1234,test1^M
5678,test2^M
9101,test3^M
参考資料
告知
最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを
募集しております。詳しくは採用情報ページをご確認ください。
みなさまからのご応募をお待ちしております。