【问题标题】:Bash Script for Load Data Infile MySQL用于加载数据文件 MySQL 的 Bash 脚本
【发布时间】:2014-04-03 22:44:57
【问题描述】:

所以我正在尝试创建一个我可以运行的脚本,它将批量导入 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 中运行良好。

【问题讨论】:

    标签: mysql bash eof load-data-infile


    【解决方案1】:

    如果您想在双引号字符串中使用文字双引号,请使用\" 转义它们。由于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
    

    【讨论】:

    • 在这种情况下,您实际上不需要转义换行符。
    • ERROR 1064 (42000) at line 1:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'LOAD DATA LOCAL INFILE ("csv_name.csv") INTO TABLE temp_table' 附近使用正确的语法
    • @XFerrariX 删除 INFILE (\"$f\") 中的两个 \" .. 或将它们替换为 '
    • 非常感谢@that other guy。您的上述脚本效果很好。
    • 我继承了一个使用“mysql
    【解决方案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 '\"'"
    

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 2012-11-21
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多