【问题标题】:Csv file upload into database using shell script shows error使用 shell 脚本将 CSV 文件上传到数据库显示错误
【发布时间】:2015-06-07 05:49:02
【问题描述】:

我正在使用脚本上传 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"

【问题讨论】:

  • 函数的输出与您的 csv 文件:2014/07/08, 2014/07/08- 2014/07/08, 2014/06/08
  • @Cyrus 但我不断收到错误消息,这是为什么呢?
  • 我不知道。您的问题缺少脚本的上传部分。
  • @anubhava 预期输出?好吧,我需要将 csv 数据转换为表格格式,以便可以将 c 列下的值放入数据库。
  • 是的,这就是预期的输出。你能从上面的输入中显示那些你期望的插入 sql。

标签: php mysql bash shell csv


【解决方案1】:

最好像这样在 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')

【讨论】:

  • 我知道,但我应该用 shell 脚本来做这个。
  • 是的,它确实有帮助,但它也插入到标题名称中。如何排除?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 2016-09-29
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多