【问题标题】:generate SQL queries out of CSV table从 CSV 表中生成 SQL 查询
【发布时间】:2020-03-18 09:52:19
【问题描述】:

早上好, 我有一个 CSV 文件,第一行包含我的表格列,其余的是数据。类似的东西

FIELD1,FIELD2,FIELD3
data1,data2,data3 
data1,data2,data3

现在我一直在尝试编写一个脚本,该脚本将返回以下输出并且可以多次使用。

INSERT INTO tablename (FIELD1,FIELD2,FIELD3) VALUES
   (data1,data2,data3)
INSERT INTO tablename (FIELD1,FIELD2,FIELD3) VALUES
   (data1,data2,data3)
INSERT INTO tablename (FIELD1,FIELD2,FIELD3) VALUES
   (data1,data2,data3)

这就是我目前所拥有的,但它没有返回正确的输出。

firstline=$(printf '%s\n' 1p d wq | ed -s file.csv )
cat file.csv | while read line
do
    field1=$(echo "$line" | cut -d "," -f1)
    field2=$(echo "$line" | cut -d "," -f2)
    field3=$(echo "$line" | cut -d "," -f3)

    echo "INSERT INTO tablename ($firstline) VALUES ($fields1 $field2 $field3) ">prova.csv
done
) VALUES (  15blename (data1,1,1

我不确定是否可以在 while 循环中使用变量 $firstline...但我不明白为什么它不打印插入内容和正确的括号。

提前致谢。

编辑: 我有一个新问题:SQL 助手不允许我插入未用“'”括起来的值,所以我的问题是如何编辑脚本使其看起来像这样:

  • INSERT INTO 表名(列)VALUES ('data1','data2','data3') ">prova.csv

谢谢

【问题讨论】:

    标签: sql shell csv


    【解决方案1】:

    使用 awk:

    awk 'NR==1{x=$0;next} {printf "INSERT INTO tablename (%s) VALUES (%s)\n",x,$0}' file
    

    【讨论】:

    • 谢谢,我又试了一次,结果还是一样:)VALUES ( 1, 2, 3 。括号不正确,不考虑插入 我不明白为什么
    • @Marco 您的输入文件是否有 DOS 行结尾?如果是,请通过dos2unix file 命令修复它
    • 编辑:我有一个新问题:SQL 助手不允许我插入未用“'”括起来的值,所以我的问题是如何编辑脚本使其看起来像这样: INSERT INTO tablename (columns) VALUES ('data1','data2','data3') ">prova.csv
    • @Marco awk 'NR==1{x=$0;next} {gsub(/,/,"\47,\47");printf "INSERT INTO tablename (%s) VALUES (\47%s\47)\n",x,$0}' file
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 2020-06-06
    • 2016-08-20
    • 1970-01-01
    • 2012-06-20
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多