(シェルスクリプト)csvファイルを扱う

投稿者: | 2016年12月12日

みなさんこんにちは。ヒロウミです。

linuxのシェルスクリプトでcsvを扱ったのでメモっておきます。

まず、CSVのデータを用意。今回は偉人の名言をチョイス。これをSQLのインサート文に変換します。

$ cat proverb_data.csv 
'ゲーテ','自分自身を信じてみるだけでいい。きっと、生きる道が見えてくる。'
'バーバラ・ブラハム','たいていの人はほんとうになにがほしいのか、心の中でわかっています。人生の目標を教えてくれるのは直感だけ。ただ、それに耳を傾けない人が多すぎるのです。'

次にこのファイルを引数に受け取るシェルスクリプト。

if文の「-e」はファイルの存在確認。条件を複数指定する時は[条件] || [条件]の様に記述。

$ cat convert_csv_to_sql.sh 
#!/bin/bash

#Check params and confirm existence of file.
if [ $# -ne 1 ] || [ ! -e $1 ]; then
  echo "Please specify the csv file."
  exit 1
fi

#Delete old file.
if [ -e insert_data.sql ]; then
  rm insert_data.sql
fi

CSVFILE=$1

#Convert csv to sql.
for LINE in `cat ${CSVFILE} | grep -v ^#`
do 
  #Set params.
  AUTHOR=`echo ${LINE} | cut -d ',' -f 1`
  PROVERB=`echo ${LINE} | cut -d ',' -f 2`

  #Create sql.
  echo "INSERT INTO proverb(author,proverb) VALUES(${AUTHOR},${PROVERB});" >> insert_data.sql
done

参考サイト:

文字列を切り出す

シェルのif文でAND条件を複数指定したい

シェルスクリプトでファイル存在確認Add Star