bash脚本中的字符串修改

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;土

我正在尝试从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;土地金额;金额;;请;奥特

这是我从上面的代码片段中得到的:

[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之后添加了一个逗号,但我需要最后一个回音行不带逗号:任何提示都是非常感谢的。做了这个把戏。。。