- ベストアンサー
csvファイルから、データをシェルで取り込みたい
前の質問 http://oshiete1.goo.ne.jp/kotaeru_vote.php3?q=4899864 他の質問コーナー http://okyuu.com/ja/question/6095 MySQLのデータベースを作成するために、csvファイルをつくって、シェルでテーブルに取り込みたいと思っています。前のスクリプトを書き直したので、新規質問という形で書かせて下さい。 【環境】LINUX Fedora10 MySQL5.0 インターネット接続できず、USBメモリでデータを運んでいる。ここのスクリプトもコピペではなく手書き。 #bash torikomi.sh とうつと torikomi.sh: line 19 : syntax error : unexpected end of file とでてきてしまい、うまく処理できません。 ひとまず、Perlなどは使わず、bashのみにて処理を行いたいと思っています。(Perlは知らない言語なので) スクリプト #!/bin/bash set hensu=`cat /home/******/data1.csv` for i in $hensu do set a=`echo $i | awk -F, '{print $1}'` set b=`echo $i | awk -F, '{print $2}'` set c=`echo $i | awk -F, '{print $3}'` mysql --user=root --password=****** db1<<EOF insert into tbl2(aaa,bbb,ccc) values($a,"$b","$c"); EOF done
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一行づつ処理していると発狂するほど遅いので、普通は下記のようなloadユーティリティーを使うのではないでしょうか? http://yoshimov.com/?page=MySQL%2FCSV%A4%C7%A4%CE%C6%FE%BD%D0%CE%CF bashの練習として、どうしても上記のスクリプトでやりたいということでしたら、bashはあまり詳しくないので、あまりお力になれなさそうです。 ちなみに、私の環境(Cygwin+bash)だと、 set a=`echo $i | awk -F, '{print $1}'` が、きちんと動かず、 a=`echo $i | awk -F, '{print $1}'` というふうに、setを抜かないとダメでした。 a, b, c等の変数に、意図した値が格納されているか確認するとよいかもしれません。 以下は、ご参考です。 #!/bin/bash for i in `cat ./a.csv` do set a=`echo $i | awk -F, '{print $1}'` set b=`echo $i | awk -F, '{print $2}'` set c=`echo $i | awk -F, '{print $3}'` cat <<EOF a is $a b is $b c is $c EOF done
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
まずは、小さいシェルスクリプトを作って試してみてはどうですか。 それと 「torikomi.sh line21 ; syntax error :unexpected end of file」 とでるならシェルスクリプト全部アップしてみては。
お礼
ご回答ありがとうございます。HERE DOCUMENT については詳しくはないのですが、 どうやら原因はEOFが、改行の関係でエラーになっているようです。
- nora1962
- ベストアンサー率60% (431/717)
loadコマンドを使った例 #!/bin/bash mysql -u root -p****** db1<<EOF load data infile '/home/******/data1.csv' into table tbl2 fields terminated by ','; quit EOF
補足
ご回答ありがとうございます。 実例は大変参考になります。 是非、活用させて下さい。 現在 load を使って試していますが、 torikomi.sh line21 ; syntax error :unexpected end of file というエラーに悩んでいます。 端末には、改行を指定するチェックボックスはないようです。 改行エラーでしょうか。
補足
ご回答ありがとうございます。 load というのは知りませんでした。 是非、参考にさせて下さい。 bash は set を使わないみたいですね。 自分はcシェルとごっちゃになっていたようです。 現在 load を使って試していますが、 torikomi.sh line21 ; syntax error :unexpected end of file というエラーに悩んでいます。