
はじめに
シェルスクリプトにてCSVファイル内の値を処理に使用する方法になります。
データベースからエクスポートしたCSVファイルを使ってその値から処理を行う必要があった際に書きました。
サンプルCSVファイル
以下の様なCSVファイルがあると想定して項目の値を取得します。
ファイル名:csvFile.csv
1,aaa,bbb,ccc,ddd
2,eee,fff,ggg,hhh
このようなファイルから各項目の値を取り出して、シェルスクリプト内で使用したいときはfor文とcutをうまく組み合わせることで簡単に実現することができました。
スクリプト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CSV_FILE=csvFile.csv for line in `cat ${CSV_FILE} do colmun1=`echo ${line} | cut -d ',' -f 1` colmun2=`echo ${line} | cut -d ',' -f 2` colmun3=`echo ${line} | cut -d ',' -f 3` colmun4=`echo ${line} | cut -d ',' -f 4` colmun5=`echo ${line} | cut -d ',' -f 5` echo "項目1:${colmun1}" echo "項目2:${colmun2}" echo "項目3:${colmun3}" echo "項目4:${colmun4}" echo "項目5:${colmun5}" echo "行終了" done |
解説
手順としてはまず、for line in csvファイル名を使ってCSVファイルを1行ずつ読み込むループ処理を作成しています。
そしてそのループ内で現在行の文字列をcutコマンドを使用して分割、-dオプションを使用してデリミタ(区切り文字)を指定します。
さらに-fコマンドを使用して抽出するフィールドの番号(列)を指定します。
このように処理することで各行の各項目の値を取得することができます。
また、CSVファイルでも各項目がダブルクォーテーションで括られているようなケースで項目値を取り出すには「sedコマンドを使用して文字列からダブルクォーテーションを削除する方法」を参考にしていただければすぐにできると思います。
今回はデータベースから出力したCSVファイルを使用するために書きましたが、他にも応用が効くと思います。