다음 형식의 상당히 큰 텍스트 파일(수천 줄)이 있습니다.
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>