2014-06-14 1 views
2

에서 항목을 중복 둡니다이 내 데이터 구조입니다 :단지 첫번째 bash는

First A 1385 
First B 8364 
First C 9734 
First C 9625 
Second A 3566 
Second B 9625 
Second B 0238 

내가 중복 된 라인 항목이 무엇을 제거 (열 1 정보 2)과의 첫 번째 항목을 둡니다. First C 9625Second B 0238을 그들이 First CSecond B의 두 번째 사건은,이 같은 결과에 대해 :

First A 1385 
First B 8364 
First C 9734 
Second A 3566 
Second B 9625 

내가 시도하는 것 :

awk '{print $1"\t"$2}' FILE | 
    sort -u | 
    while read LINE; do 
     echo $LINE | 
     tr ' ' '\t' | 
     grep -m1 -F -f - FILE 
    done 

난 그냥 떠들썩한 파티를 배우고
나는 제거 할 코딩 및 내 솔루션은 매우 서투른 있습니다. 나는 하나의 bash 명령에서 원하는 것을 할 수 있다고 믿는다. 이 필드 사이의 ,가 필요한 이유를 다음

+2

'AWK를 filename'은 충분하다. – devnull

+1

@devnull 아니요,'$ 1'과'$ 2'의 값에 실패 할 것입니다. Gregor는 텍스트 파일을 처리하기 위해 쉘에 루프를 작성할 때마다 잘못된 접근법을가집니다. –

답변

3
$ awk '!seen[$1,$2]++' file 
First A 1385 
First B 8364 
First C 9734 
Second A 3566 
Second B 9625 

이다 '! A [$ 1 $ 2] ++'

$ cat file 
ab c 
a bc 
$ 
$ awk '!seen[$1,$2]++' file 
ab c 
a bc 
$ awk '!seen[$1$2]++' file 
ab c