2013-10-02 133 views
0

我很难从csv文件中删除特殊字符。如何从unix中的csv文件中删除特殊字符

我的过程是这样在我的输出表我有这样

Col1 
BC,BS/APP 

一些像这样的数据我还有一个10列,其中有获得特殊字符时,我和PATINDEX我是试过的机会能够删除只有第一个特殊字符,并删除其他字符,我需要使用while循环,这是很难做到这一点。

所以我尝试了数据bcping下面的csv文件后删除特殊字符是我使用

bcp_with_error_check tempdb..STT_IM166_WEB_MWE out temp.dat -SSVR -UUSR -PPWD -c -b1000 -t'","' 
sed -e 's/,"0/,="0/g;s/,"1/,="1/g;s/,"2/,="2/g;s/,"3/,="3/g;s/,"4/,="4/g;s/,"5/,="5/g;s/,"6/,="6/g;s/,"7/,="7/g;s/,"8/,="8/g;s/,"9/,="9/g'temp.dat > temp1.dat 
sed -e 's/$/"/g' temp1.dat > temp2.dat 
sed -e 's/^/="/g' temp3.dat >>Filename.csv 

我的问题bcp命令是因为它是CSV文件,如果我删除逗号(,)考虑到特殊字符会影响文件格式。

我可以在数据库中单独替换逗号,但是我没有收到单独排除逗号并删除其他字符的命令。请帮我出我在非常需要这个命令的

+0

这部分删除逗号? – Beta

+0

您如何知道第一列包含逗号与第一个逗号标记第一个字段结束的时间?你知道第二个字段总是数字吗? –

+0

在这里我没有包括删除逗号的代码@Beta – Ramesh

回答

1

我不清楚你真的是后话,但起码你可以通过10倍缩小你的第一个sed命令:

sed -e 's/,"\([0-9]\)/,="\1/g' temp.dat > temp1.dat 

该模式查找逗号,双引号和一个数字(并记住数字是什么);它被逗号,等号,双引号和记住的数字取代。

除非你有不同的临时文件的理由,你可以折叠三个sed命令为一家拥有:

sed -e 's/,"\([0-9]\)/,="\1/g' -e 's/$/"/g' -e 's/^/="/g' temp.dat >>Filename.csv 

如果bcp_with_error_check如果省略out temp.dat参数将写到标准输出,那么你不需要任何临时文件(这通常是一个好主意)。请注意,如果两个人无意中在相同的目录中同时运行这个命令,他们会在对方的临时文件中践踏(或因为不能运行而遇到问题)。没有临时文件,你只有最后的文件名,Filename.csv担心。

但是,这并没有解决你的主要问题 - 它只是改善你的脚本。

+0

谢谢您的意见,我会注意到但我的主要问题是删除特殊字符而不会干扰csv布局。 – Ramesh