awk / sed比较第一列并在一行中添加后续行

鲨鱼

我在文件中有以下内容

20161109104500.0+0000,x,5631
20161109104500.0+0000,y,2
20161109104500.0+0000,z,2
20161109104500.0+0000,a,4117
20161109104500.0+0000,b,6182
20161109104500.0+0000,c,1556
618
225
41
4
20161109104500.0+0000,k,2689
20161109104500.0+0000,l,6182
20161109104500.0+0000,d,3241
20161109104500.0+0000,e,2418
20161109104500.0+0000,f,26
20161109104500.0+0000,g,285166.843750
20161109104500.0+0000,h,67216

我想做的是比较第一列(日期/时间),如果匹配则将行连接成一列。以下是所需的输出

20161109104500.0+0000,x,5631,y,2,z,2,a,4117,b,6182,c,1556
20161109104500.0+0000,k,2689,l,6182,d,3241,e,2418,f,26,g,285166.843750,h,67216

想使用awk / sed执行此操作

Justaguy

也许awk以下内容会有所帮助,它将与所有日期匹配并将它们合并为一行并保持不匹配。

awk -F',' '{if(a!=$1) {a=$1; printf "\n%s%s",$0,FS} else {a=$1;$1="";printf $0 }} END {printf "\n" }' file

20161109104500.0+0000,x,5631, y 2 z 2 a 4117 b 6182 c 1556
618,
225,
41,
4,
20161109104500.0+0000,k,2689, l 6182 d 3241 e 2418 f 26 g 285166.843750 h 67216

awk下面将匹配所有的日期和它们合并成一排,并删除不匹配。

awk -F, '{if(A!=$1 && A && VAL ~ /,/){print VAL;VAL=""};VAL=A==$1?VAL OFS $2 OFS $3:$0;A=$1} END{print VAL}' file

20161109104500.0+0000,x,5631 y 2 z 2 a 4117 b 6182 c 1556
20161109104500.0+0000,k,2689 l 6182 d 3241 e 2418 f 26 g 285166.843750 h 67216

上面的代码认为第一个字段必须匹配是基于下一行而不是整个文件,并假定文件的不匹配行中将不包含(,)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章