2016-11-12 2 views
0

내가 파일에 내용을 다음 한 한 행에 다음 줄을 추가 할 수 나오지도/AWK는 첫 번째 열을 비교하고

내가하고 싶은 무엇
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를 사용 하시겠습니까 원하는 출력이 작업

답변

0

을 수행 할 때는 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 

위의 코드는 제 1 필드가 다음 줄이 아니라 전체 파일의 기준이다 일치 할 필요가 있음을 고려하고 그들() 파일의 비 매칭 라인이 필요가 없습니다 가정합니다.

+0

감사합니다 크리스, 그것은 쉼표 분리가 누락 된 것을 제외하고는 매력처럼 작동합니다. 나는 명령을 약간 수정했으며 원했던대로 작동합니다. 다시 awk -F, '{if (A! = $ 1 && A && VAL ~ /, /) {print VAL}; VAL = A == $ 1? VAL OFS ","$ 2 ","OFS $ 3 : $ 0; A = $ 1} END {print VAL} ' – sshark

+0

다른 사람들이 사용할 수 있도록 답변을 수락 해 주시기 바랍니다. 감사. – Chris

관련 문제