我正在尝试从csv文件生成SQL表头。因为我遇到了一些麻烦,我写了一个测试片段,这是我到目前为止所得到的:
#!/bin/bash
function quote {
for i ; do
# echo "\`$i\`"
echo "\`$i\` varchar (100),\n"
done
}
quote $(head -1 Zustaendigkeit.csv | sed 's/;/ /g')
这是我使用的csv行:
茨;大街; PLZ_Ort;土地;金额; Amt_Nr; PLZ;的Ort
这是我使用上述代码段获得的内容:
[root@db ~]
174# ./tst.sh
`Netz` varchar (100),\n
`Strasse` varchar (100),\n
`PLZ_Ort` varchar (100),\n
`Land` varchar (100),\n
`Amt` varchar (100),\n
`Amt_Nr` varchar (100),\n
`PLZ` varchar (100),\n
` varchar (100),\n
在最后一行中,它遗漏了Ort at the beginning of the line. When I use only "echo "\
$ i`“”,我在上面的代码段中对此进行了评论:
[root@db ~]
170# ./tst.sh
`Netz`
`Strasse`
`PLZ_Ort`
`Land`
`Amt`
`Amt_Nr`
`PLZ`
`Ort
缺少最后一个`
希望有人找不到我的链接......
格尔茨 的Mirco
答案 0 :(得分:2)
您可能在该行的末尾有一个Windows行结尾。删除它:sed 's/\r//g'
。
您可以使用循环并将IFS设置为sed
,而不是使用;
。删除\r
是通过参数扩展完成的。
IFS=';'
read -a a < Zustaendigkeit.csv
for b in "${a[@]}" ; do
echo "\`${b%$'\r'}\` varchar(100)"
done
答案 1 :(得分:1)
为什么不awk
?我曾经这样做过:
awk -v Q="'" -F "," 'NR==1 { print "create table SOMETABLE ("
for (i=1;i<NF;i++) {
print $i " varchar2(100), "
}
print $NF " varchar2(100) );"
}
NR%1000 == 0 { print "commit;" }
{ print "insert into SOMETABLE values ( "
for (i=1;i<NF;i++) {
print Q $i Q ", "
}
print Q $NF Q " );"
}
END { print "commit;"
print "exit;"
}' INPUT.CSV > SQL.sql