분할

2010-08-17 8 views
1

두 개의 열 "이름"과 "날짜"와 탭으로 구분 된 텍스트 파일을 감안할 때 :분할

Sam  20100101 
Sam  20100101 
Sam  20100102 
George 20100101 
George 20100101 
George 20100102 

내가 같은 파티션 누적 합계로 세 번째 열을 추가 AWK 사용할 수 열 1과 2의 각 고유 한 패턴에 대해 0에서 카운터를 시작한 다음 패턴의 반복을 위해 증가시킵니다. 테이블

에서 (열 1로 파티션, 열 열 (10)에 의해 두 개의 순서) 이상 선택 ROW_NUMBER()를하지만 대안이 필요 - 반드시 AWK를하지만,이 와서 :

Sam  20100101  1 
Sam  20100101  2 
Sam  20100102  1 
George 20100101  1 
George 20100101  2 
George 20100102  1 

나는 SQL에서이 작업을 수행 to mind - SQL에 의해 처리되지 않은 텍스트 파일들. 텍스트 파일은 ~ 50GB이고 각각 ​​약 200mil 행입니다.

중복 행을 제거하려면 카운터를 사용합니다. 위의 예를 보면 다음과 같이 할 수 있음을 알고 있습니다.

sort myfile.txt | uniq -u

내 텍스트 파일에는 완전히 복제 된 행을 생성하지 않을 수있는 필자의 예 (간단히하기 위해)에 포함되지 않은 추가 열이 있습니다. |

은 내가

정렬 MYFILE.TXT에만 이름과 날짜 열을 일치하도록 매개 변수를 추가해야 유니크 -u

명령? 아휴? 다른 것?

답변

3

모든 라인이 동일 포맷 (공백 포함),이 트릭을 할 것 같은 간단한 경우 :이 필요하기 때문에

awk '{print $0, ++a[$0]}' 

내가 GB 크기의 파일에 대한 성능에 대한 확실하지 않다가, 고유 행당 숫자를 저장하십시오. 데이터를 정렬하면 일정한 저장 용량으로 자리를 비울 수 있습니다.

awk '{ if ($0 != prev) n = 0; print $0, ++n; prev = $0 }' 
+0

감사합니다. 모든 줄이 동일한 서식을 가지고있는 것은 아닙니다. ++ a [$ 0]을 처음 두 열에서만 일치시키는 것으로 전환 할 수 있습니까? ++ a [$ 1 $ 2]? –

+0

@M. Roessler 예, 괜찮습니다. – schot