2014-03-03 59 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 '\"'"