bash脚本中的字符串修改
我正在尝试从csv文件生成SQL表头。当我遇到一些麻烦时,我编写了一个测试片段,以下是我目前得到的:bash脚本中的字符串修改,bash,Bash,我正在尝试从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行: Netz;斯特拉斯;PLZ_Ort;土
#!/bin/bash
function quote {
for i ; do
# echo "\`$i\`"
echo "\`$i\` varchar (100),\n"
done
}
quote $(head -1 Zustaendigkeit.csv | sed 's/;/ /g')
这是我使用的csv行:
Netz;斯特拉斯;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。当我只使用上面代码段中注释的“echo”\
$I`”时,我得到如下结果:
[root@db ~]
170# ./tst.sh
`Netz`
`Strasse`
`PLZ_Ort`
`Land`
`Amt`
`Amt_Nr`
`PLZ`
`Ort
哪一个错过了最后一个`
希望有人能帮我找到丢失的链接
格里茨
Mirco为什么不
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
awk-vq=“””-F“,“'NR==1{print”创建表SOMETABLE(“
对于(i=1;i为什么不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
awk-vq=“””-F“,“'NR==1{print”创建表SOMETABLE(“
对于(i=1;i您可能在行的末尾有一个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
IFS=';'
读取-a
行的末尾可能有一个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
IFS=';'
读取-a
加载我使用的数据:将数据填充“/path/To/Zustaendigkeit.csv”加载到以“;”结尾的表Zustaendigkeit字段中;那么您只能使用awk
脚本的NR==1
部分来生成CREATE TABLE
语句。要加载数据,我使用:将数据填充“/path/to/Zustaendigkeit.csv”加载到以“;”结尾的表Zustaendigkeit字段中;然后您可以只使用awk
脚本的NR==1
部分来生成CREATE TABLE
语句最后一个回音行不带逗号:任何提示都是非常感谢的。这是我的问题,现在已经解决了…在varchar之后添加了一个逗号,但我需要最后一个回音行不带逗号:任何提示都是非常感谢的。做了这个把戏。。。