AWK csv文件到sql文件输出

时间:2011-12-12 16:14:56

标签: sql linux shell awk

有人可以帮助我,因为我无法让我的awk命令将一些简单的3列CSv输出到SQl

CSV

01Aug2011,user,12
02Aug2011,userb,34

AWK

我知道这个适合我

awk -F',' '{ print "INSERT INTO Testing (`Date`,`User`,`Usage`) VALUES (" "'"$1"'""," """'"$2"'""," """'"$3"'"")" ""}' new.csv > output.log

但不是这个

awk -F',' '{ print "INSERT INTO Testing (`Date`,`User`,`Usage`) VALUES (" "`"$1"`""," """`"$2"`""," """`"$3"`"")" ""}' new.csv > output.log

2 个答案:

答案 0 :(得分:4)

我不太确定你的问题是什么。

但如果问题是单引号,你可以试试这个

awk -F',' '{ printf "INSERT INTO Testing (\x27\Date\x27,\x27User\x27,\x27Usage\x27) VALUES (\x27%s\x27,\x27%s\x27,\x27%s\x27)",$1,$2,$3;print ""}' yourFile

使用您的示例输入行,输出为:

INSERT INTO Testing ('Date','User','Usage') VALUES ('01Aug2011','user','12')
INSERT INTO Testing ('Date','User','Usage') VALUES ('02Aug2011','userb','34')
希望这就是你想要的。

答案 1 :(得分:2)

首先看起来你在insert语句的末尾缺少分号。

尝试将SQL粘贴到mysql客户端会话中 - 这将显示您是否错误地生成了SQL。我怀疑mysql拒绝日期(如果是日期列)。

我会使用printf - 它使代码更容易阅读 - 你有很多引号难以阅读 - 尽可能少使用引号 - 只有在需要时才添加它们。

awk -F',' '{ printf("INSERT INTO Testing (Date,User,Usage) 
VALUES('%s', '%s', %d);\n", $1, $2, $3); }' file.csv