【问题标题】:How to remove special characters from a csv file in unix如何从 unix 中的 csv 文件中删除特殊字符
【发布时间】:2013-10-02 20:12:19
【问题描述】:

我很难从 csv 文件中删除特殊字符。

我的输出表中有这样的过程我有一些这样的数据

Col1 
BC,BS/APP 

像这样,当我尝试使用 patindex 时,我有另外 10 列有可能获得特殊字符,我只能删除第一个特殊字符,而要删除其他字符,我需要使用 while 循环很难做到这一点。

所以我尝试在将数据 bcp 到 csv 文件后删除特殊字符,下面是我正在使用的 bcp 命令

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

我的问题是因为它是 CSV 文件,如果我删除逗号 (,),考虑到它是特殊字符,它会干扰文件布局。

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

【问题讨论】:

  • 这部分删除了逗号?
  • 您如何知道第一列何时包含逗号与第一个逗号何时标记第一个字段的结尾?你知道第二个字段总是数字吗?
  • 这里我没有包含删除逗号@Beta的代码
  • 不,我只是包含了一个列示例,col1 并不总是应该包含逗号或任何其他字符。如果它包含任何特殊字符如何处理它@jonathan leffler
  • 如果要在逗号分隔的输出中自动修复“普通字段中的逗号”,则必须有一种方法来发现它们。你怎么知道你什么时候在一个字段的正文中有一个逗号而不是分隔两个字段?一定有什么东西可以告诉你……所以你也必须告诉计算机如何识别它。如果没有比我们更多地了解您的数据,实际上不可能提供更多帮助。这不是一个容易处理的问题。您是否检查过 BCP 手册以确保无法获得正确的 CSV 输出?

标签: unix sed awk special-characters bcp


【解决方案1】:

我不清楚你真正想要的是什么,但至少你可以将你的第一个 sed 命令缩小 10 倍:

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

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

但是,这并不能解决您的主要问题——它只是改进了您的脚本。

【讨论】:

  • 感谢您的 cmets,我会注意的,但我的主要问题是在不影响 csv 布局的情况下删除特殊字符。
猜你喜欢
  • 2016-10-17
  • 2013-09-25
  • 2021-07-15
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多