从CSV文件中删除字符

时间:2016-07-04 03:17:41

标签: mysql bash csv sed

我有一个CSV文件,其中包含从mySQL表导出的数据。在其中一个字段中,有一个换行符,将字段“拆分”为2行。我正在尝试删除这个换行符,但似乎无法做到。

此外,相同的字段可能包含双引号和逗号,当我导出表"时,当我用,括起字段时,这会给我带来麻烦。所以我使用|来终止字段,而不是用任何东西包围字段。

当我cat linux机器上的文件时,该字段看起来像这样

13"\
58,20,"3

该字段应该是什么样的

13"58,20,"3

当我使用vi“十六进制编辑器”(:%!xxd)来检查线的十六进制值时,我得到了

31 33 22 5c 0a 35 38 2c 32 30 2c 22 33

我尝试使用sed

sed -e 's/\\\n//'

sed -e 's/\x5c\x0a//'

删除换行符,但它们无法正常工作。如何将字段格式化为应该看起来的样子?

3 个答案:

答案 0 :(得分:4)

尝试:

$ sed '/\\$/{N; s/\\\n//}' file
13"58,20,"3

/\\$/选择以\结尾的行。对于这些行,我们在下一行(命令N)中读取,然后我们进行替换以删除不需要的\和换行符:s/\\\n//

不以\结尾的行将保持不变。

这种方法假设连续的线条只持续一次。如果有两个或更多连续的行,我们需要一个循环。

答案 1 :(得分:2)

在MySQL端处理此问题的一个选项是使用REPLACE()并从包含它们的列(或列)中删除换行符:

SELECT REPLACE(col, '\n', '')
FROM yourTable
INTO OUTFILE '/output.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

答案 2 :(得分:0)

我遇到了同样的问题,使用 HEX 函数显示我在字段 CHAR(13) 和 CHAR(10) 的末尾有 2 个字符 - CR 和 LF 所以解决方案是替换这两个字符 - 即< /p>

REPLACE(REPLACE(邮政编码,'\r',''),'\n','')