【问题标题】:AWK csv file to sql file outputAWK csv 文件到 sql 文件输出
【发布时间】:2011-12-12 16:14:56
【问题描述】:

谁能帮帮我,因为我无法让我的 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

【问题讨论】:

  • 这两个命令有何不同?在我看来是一样的......
  • @Grimlockz 命令相等 oO
  • 你在使用 MySQL 吗? LOAD DATA LOCAL INFILE 会更容易。
  • 仔细观察发现第一个使用撇号/记号,而第二个在 VALUES 子句中使用反引号(仅在将其粘贴到代码块后才清楚)

标签: sql linux shell awk


【解决方案1】:

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

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

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')

希望这是你想要的。

【讨论】:

    【解决方案2】:

    首先,您似乎缺少插入语句末尾的分号。

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多