我有一个破损的csv文件。这些领域(包括linux和windows)都有结束语。我知道每行中的字段数量为N
。对于例如对于N = 5
field1,field2,field3,field4,field5
field6,field7,fie
ld8,field9,field10
...
如何加入(合并?)较小的行以形成带有N
字段的常规行,假设没有其他异常。我可以使用tr -d '\r'
转换Windows结尾,但接下来该做什么。
答案 0 :(得分:5)
这会将虚线分组到五个字段:
$ awk -F, 'last{$0=last $0;} NF<5{last=$0;next} {print;last="";}' file
field1,field2,field3,field4,field5
field6,field7,field8,field9,field10
awk一次读取一条记录(行)并将该行划分为字段。目标是根据需要合并/合并行,以确保它们有五个字段。
摘要:任何短行都会保存在变量last
中并附加到下一行。如果一行有五个或更多字段,则会打印出来。
<强>详细信息:强>
-F,
这会将字段分隔符设置为逗号。
last{$0=last $0;}
如果前一行少于五个字段,则将其保存在变量last
中。如果last
不为空,则前置到当前行的开头。
NF<5{last=$0;next}
如果当前行少于五个字段,请将其保存在last
并跳转到next
行。
{print;last="";}
如果我们到达这里,那么当前行至少有5个字段。打印出来。将last
设置为空字符串。
答案 1 :(得分:-1)
cat fileName | tr -d '\r' | tr -d '\n'> newFile