我有一个巨大的 csv 文件,大约 500Mb。字段分隔符是管道字符 (|)。有些行包含换行符和回车符。我需要删除它们,但我不想删除每行末尾的合法换行符。我尝试过使用 sed 和 tr,如其他问题所示,但最终删除了所有换行符,这不是我想要的。
示例输入(||Yes 行应连接到上一行):
21/06/2016 18:06:32|||||||||||||||||||32 Red|Jrup Vej 6|61069849
||Yes||vals
21/06/2016 18:06:32|||||||||||||||||||101 K|Ser Bevard 110|||No|
我的尝试:
sed -i 's/\r\n//g' myfile.csv
tr -d '\r' < myfile.csv
感谢您的帮助, 乔
csv 数据通常具有固定数量的列。
在您的情况下,完整记录似乎有 25 列。基于此,您可以使用此 awk 命令来连接损坏的记录:
awk -F '|' 'NF < 25 {getline s; $0 = $0 s} 1' file
21/06/2016 18:06:32|||||||||||||||||||32 Red|Jrup Vej 6|61069849||Yes||vals
21/06/2016 18:06:32|||||||||||||||||||101 K|Ser Bevard 110|||No|
我喜欢@anubhava 的宝石命令。我针对记录被多个换行符打破的情况进行了修改。除非我遗漏了一些东西,否则原件最多只会连接两行,然后从下一行开始。
awk -F '|' '{ while( NF < 25 ) { getline s; $0 = $0 } 1' file