Bash脚本用于在MySQL中加载数据。

3
我正在尝试创建一个脚本,可以批量导入CSV文件到一个表中。
我无法让这个脚本正常工作。
以下是我正在运行的脚本:
#!/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中可以直接正常工作。"
2个回答

11

当你想在双引号字符串中使用文字双引号时,请使用 \" 进行转义。由于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
在这种情况下,你实际上不需要转义换行符。 - Ярослав Рахматуллин
1
错误 1064 (42000) 第 1 行:您的 SQL 语法有误;请检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法使用方式。第 1 行附近出现了 'LOAD DATA LOCAL INFILE ("csv_name.csv") INTO TABLE temp_table' 的错误。 - XFerrariX
@XFerrariX,将INFILE(“$f”)中的两个"删除..或者用'替换它们。 - Ярослав Рахматуллин
非常感谢@那个人。你上面的脚本运行得很好。 - XFerrariX
我继承了一个使用“mysql < $infile”格式的脚本,这是它需要走的方向,感谢@thatotherguy。 - Anthony

2
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 '\"'"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接