如果字段数较少,如何在csv中连接行

时间:2015-04-06 05:40:34

标签: bash awk sed

我有一个破损的csv文件。这些领域(包括linux和windows)都有结束语。我知道每行中的字段数量为N。对于例如对于N = 5

field1,field2,field3,field4,field5
field6,field7,fie
ld8,field9,field10
...

如何加入(合并?)较小的行以形成带有N字段的常规行,假设没有其他异常。我可以使用tr -d '\r'转换Windows结尾,但接下来该做什么。

2 个答案:

答案 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