在 csv 文件中不正确的字段拆分后删除换行符
Remove newline after incorrect field splitting in csv file
我使用 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
但不适用于 "any number of alphabet characters after the quote not ending in semicolon"。我有一个包含这些行的模式文件(与 -f 一起使用):
:a;N;$!ba;s/";"\n/";"/g
:a;N;$!ba;s/\([A-z]\)\n//g
:a;N;$!ba;s/\([:alpha:]\)\n//g
模式文件的第一行有效,但我尝试了第二行和第三行的组合,但我总是得到一个空文件。
如果当前行不以分号结尾,读取下一行并将其附加到模式 space 并删除换行符。
sed '/[^;]$/{N;s/\n//}' file
我使用 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
但不适用于 "any number of alphabet characters after the quote not ending in semicolon"。我有一个包含这些行的模式文件(与 -f 一起使用):
:a;N;$!ba;s/";"\n/";"/g
:a;N;$!ba;s/\([A-z]\)\n//g
:a;N;$!ba;s/\([:alpha:]\)\n//g
模式文件的第一行有效,但我尝试了第二行和第三行的组合,但我总是得到一个空文件。
如果当前行不以分号结尾,读取下一行并将其附加到模式 space 并删除换行符。
sed '/[^;]$/{N;s/\n//}' file