我有一个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//'
删除换行符,但它们无法正常工作。如何将字段格式化为应该看起来的样子?
答案 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','')