중복된 필드가 있는 행의 라벨 병합

중복된 필드가 있는 행의 라벨 병합

다음 형식의 상당히 큰 텍스트 파일(수천 줄)이 있습니다.

123.123 5  
123.123 91  
156.456 45  
233.185 85  
233.185 4  
257.448 1  
455.456 60  
455.456 2

첫 번째 열은 정렬 좌표(xy)이고 두 번째 열은 레이블(0~1000)입니다. 좌표 123.123에는 라벨 5와 라벨 91이 있고, 좌표 156.456에는 라벨 45만 있는 것을 볼 수 있습니다.

모든 좌표(반복 없음)와 다른 레이블(이 레이블은 여러 번 표시됨)을 포함하는 출력으로 다른 파일을 원합니다. 이 예제의 출력은 다음과 같아야 합니다.

123.123  5   91  
156.456  45   
233.185  85  4  
257.448  1  
455.456  60  2   

내 생각은 중복 문자열(좌표, 첫 번째 열만)을 제거하고 레이블을 그대로 둔 다음 행 등을 재구성하는 것이지만 어떤 명령을 사용해야 할지 막막합니다.
또 다른 옵션은 데이터베이스를 사용하는 것입니다.

답변1

awk를 위한 직업인 것 같아요

 awk '{ c[$1]=c[$1] "\t" $2 ; } END { for ( c2 in c ) printf c2 c[c2] "\n" ; } '

어디

  • c[$1]=c[$1] "\t" $2는 라벨을 저장하고,
  • END절은 파일 끝에서 실행됩니다.
  • for ( c2 in c ) printf c2 c[c2] "\n" ;좌표를 반복하고 라벨을 인쇄합니다.

답변2

perl -p0e 'while(s/^(\S+)( .*)(\n\1)/\1\2/m){}'

기본 아이디어는 다음과 같습니다.

  • -p0파일을 메모리에 로드하고 마지막으로 인쇄합니다.
  • -e로드된 파일에서 다음 인수 실행
  • 가능하다면 다음 <word> <line>\n<word>으로 교체하세요.<word> <line>

관련 정보