簡體   English   中英

awk / sed比較第一列並在一行中添加后續行

[英]awk/sed to compare first column and add in subsequent lines in one row

我在文件中有以下內容

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執行此操作

也許下面的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

上面的代碼認為第一個字段必須匹配是基於下一行而不是整個文件,並假定文件的不匹配行中將沒有(,)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM