将不以逗号结尾的行连接在一起

时间:2014-07-04 06:27:53

标签: csv awk sed tr solaris-10

我有一个由MS Excel生成的CSV文件。在原始电子表格中存在合并单元格的情况下,包含这些单元格的原始行在CSV输出中变为多行。我想将这些加入一行。

我正在寻找一个Unix(Solaris 10)工具(sed / awk / tr等),它将所有不以逗号结尾的行连接到下一行,同时保留以逗号结尾的所有行不受影响。不以逗号结尾的行尾的换行符将替换为空格。

E.g。如果输入文件包含:

,Dilbert,
,,Wally,
Alice,
Asok9
Dogbert:
Catbert,
Ratbert,

然后结果输出为:

,Dilbert,
,,Wally,
Alice,
Asok9 Dogbert: Catbert,
Ratbert,

感谢。

2 个答案:

答案 0 :(得分:3)

你走了:

awk '{printf "%s"(/,$/?RS:FS),$0}' file
,Dilbert,
,,Wally,
Alice,
Asok9 Dogbert: Catbert,
Ratbert,

如果行以,结尾,请使用RS(记录选择器是默认的新行)
如果不是,请使用FS(字段分隔符是默认的一个空格)

答案 1 :(得分:2)

sed ':a
/,$/ b
$ b
N;s/\n/ /;b a' YourFile

与sed相同的技巧,如果存在某些尾随空格,请/,$/更改/, *$/