【发布时间】:2020-01-10 14:11:38
【问题描述】:
我使用 linux,我正在尝试为此使用 sed。我从一个机构网站下载了一个 CSV,它提供了一些要分析的数据。每个 CSV 有几千行,每行有很多列(我没有数过,但我认为这个数字没用)。字段用分号分隔并引用,因此每行的格式为:
"Field 1";"Field 2";"Field 3"; .... ;"Field X";
每个正确的行都以分号和'\n'结尾。问题是,有时,有些字段错误地有换行符,解决方法是删除换行符,这样两行就重新合并为一行。错误行示例:
"Field 1";"Field 2";"Fi
eld 3";"Field X";
我发现在开始的引号之后或引号之间的某处可以有一个 \n。
我找到了一种方法来管理最后一种情况,换行符就在引号之后:
sed ':a;N;$!ba;s/";"\n/";"/g' file.csv
但不适用于“引号后不以分号结尾的任意数量的字母字符”。我有一个包含这些行的模式文件(与 -f 一起使用):
:a;N;$!ba;s/";"\n/";"/g
:a;N;$!ba;s/\([A-z]\)\n/\1/g
:a;N;$!ba;s/\([:alpha:]\)\n/\1/g
模式文件的第一行有效,但我尝试了第二行和第三行的组合,但总是得到一个空文件。
【问题讨论】:
标签: regex csv sed split newline