세 열 중 두 열의 정보를 기반으로 고유한 행을 유지합니다.

세 열 중 두 열의 정보를 기반으로 고유한 행을 유지합니다.

다음과 같은 파일이 있다고 가정해 보겠습니다.

NW_006521251.1  428 84134
NW_006521251.1  511 84135
NW_006521038.1  202 84155
NW_006521038.1  1743 84153
NW_006521038.1  1743 84154
NW_006520495.1  198 84159
NW_006520086.1  473 84178
NW_006520086.1  511 84180

열 1과 2를 기반으로 고유한 행을 유지하고 싶습니다(즉, 첫 번째 열의 다른 레이블 아래에서 숫자가 반복될 수 있으므로 두 번째 열뿐만 아니라).

이 출력을 얻을 수 있도록( NW_006521038.1 1743목록에서 두 번째 복제본 제거):

    NW_006521251.1  428 84134
    NW_006521251.1  511 84135
    NW_006521038.1  202 84155
    NW_006521038.1  1743 84153
    NW_006520495.1  198 84159
    NW_006520086.1  473 84178
    NW_006520086.1  511 84180

awk를 사용하여 이를 수행할 수 있는 방법이 있습니까? 쓸 수 없다 uniq file.

답변1

이 문제를 해결하기 위해 고안된 "유명한" awk 관용구가 있습니다. 당신이하고 싶은 일 :

awk '!seen[$1,$2]++' file

이렇게 하면 2개 열의 키를 사용하여 "표시된" 연관 배열이 생성됩니다. 키를 처음 발견할 때 값이 0이 되도록 사후 증가 연산자를 사용하십시오. 키를 처음 볼 때 "참" 결과를 얻으려면 부정 연산자를 사용하세요.

답변2

출력이 정렬되는 것이 마음에 들지 않으면 다음을 수행하십시오.

sort -u -k1,2 file
  • -u- 고유한
  • -k1,2- 필드 1과 2를 키로 함께 사용

관련 정보