2014-03-03 64 views
2

所以我想创建一个脚本,我可以运行,将执行到一个表的CSV文件的批量导入。Bash脚本负载数据infile MySQL

我无法使脚本正常工作。

这里是我运行脚本:

#!/bin/bash 
for f in *.csv 
do 
"/opt/lampp/bin/mysql -e use test -e LOAD DATA LOCAL INFILE ("$f") INTO TABLE temp_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (DATE, TIME, SITE_NAME, SITE_IP, TOTAL_TALKTIME, EDGE_UL_BYTES, EDGE_DL_BYTES);" 
done 

当我跑我收到以下错误消息的脚本:

./script.sh: line 5: unexpected EOF while looking for matching `'' 
./script.sh: line 7: syntax error: unexpected end of file 

的LOAD DATA LOCAL INFILE命令工作正常,直接在MySQL 。

回答

6

如果要在双引号字符串中使用文字双引号,请使用\"转义它们。由于MySQL不关心换行,你也可以打破线,使其更具可读性:

#!/bin/bash 
for f in *.csv 
do 
/opt/lampp/bin/mysql -e "use test" -e " 
     LOAD DATA LOCAL INFILE '$f' 
     INTO TABLE temp_table 
     FIELDS TERMINATED BY ',' 
     OPTIONALLY ENCLOSED BY '\"' 
     LINES TERMINATED BY '\n' 
     IGNORE 1 LINES 
     (DATE, TIME, SITE_NAME, SITE_IP, TOTAL_TALKTIME, 
      EDGE_UL_BYTES, EDGE_DL_BYTES);" 
done 
+1

你并不真的需要转义换行符在这种情况下。 –

+0

好点,mysql不关心。 –

+0

第1行的错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的LOAD DATA LOCAL INFILE(“csv_name.csv”)INTO TABLE temp_table'处使用正确的语法 – XFerrariX

1
mysql -u<username> -p<password> -h<hostname> <db_name> --local_infile=1 -e "use <db_name>" -e"LOAD DATA LOCAL INFILE '<path/file_name>' 
IGNORE INTO TABLE <table_name> 
FIELDS TERMINATED BY '\t' 
OPTIONALLY ENCLOSED BY '\"'"