使用shell脚本将Csv文件上载到数据库中会显示错误

时间:2015-06-07 05:49:03

标签: php mysql bash shell csv

我使用脚本上传csv文件

values ()
{
cat "$@" | \
while IFS=, read  -r a b c d;do 

printf ' %s\n' "$c"

done | \
paste -sd,-
}

使用

插入数据
printf 'INSERT INTO `manufacturemap`(`manufacture_name`)VALUES(%s)\n'     "$(values $_csv_files)" | \
  mysql -u"$_db_user" -p"$_db_password" "$_db"

我收到以下错误

 ERROR 1054 (42S22) at line 1: Unknown column 'c' in 'field list'

过去几个小时我一直被困在这里,请帮助我。

这是输入(csv文件):

    a,b,c,d
1.01100156278101E+15,2014/07/08,2014/07/08,"Cash Withdrawal by Cheque-173320--TT1421957901"
1.01100156278101E+15,2014/07/08,2014/07/08,"Cheque Paid-173261--TT1421951241"
1.01100156278101E+15,2014/07/08,2014/07/08,"Cheque Paid-173298--TT1421951226"
1.01100156278101E+15,2014/06/08,2014/06/08,"Cash Withdrawal by Cheque-173319--TT1421858465"

1 个答案:

答案 0 :(得分:2)

最好在你的csv文件上使用awk来生成sql查询:

awk -F, 'NR>1{printf "INSERT INTO `manufacturemap`(`manufacture_name`) VALUES(\047%s\047)\n",
          $3}' file.csv
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/07/08')
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/07/08')
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/07/08')
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/06/08')

编辑:要做到这一点,没有awk,你可以这样做:

while IFS=, read -r _ _ c _; do
   [[ $((++i)) != "1" ]] && 
      printf 'INSERT INTO `manufacturemap`(`manufacture_name`) VALUES (\047%s\047)\n' "$c"
done < file.csv
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/07/08')
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/07/08')
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/07/08')
INSERT INTO `manufacturemap`(`manufacture_name`) VALUES ('2014/06/08')