다른 열 값을 기준으로 한 열의 값을 정렬하는 방법은 무엇입니까?

다른 열 값을 기준으로 한 열의 값을 정렬하는 방법은 무엇입니까?

주어진 탭으로 구분된 데이터를 정렬하고 싶습니다.

  • 첫 번째 수준은 열 1이며 오름차순으로 정렬됩니다.
  • 두 번째 수준은 열 2도 오름차순으로 정렬된다는 것입니다(그러나 조건부). 건강 상태:3열은 고유한 값으로 그룹화되어야 하지만 2열의 정렬 순서도 최대한 유지해야 합니다(최소 범위가 위쪽에 있음).
  • 3열은 전혀 정렬되지 않았지만 그룹화되어야 합니다.

입력 데이터:

2    15881764  9         C|T
2    15881767  9         C|C
2    15881989  4         C|C
2    15882091  4         G|T
2    15882451  9         C|T
2    15882454  9         C|T
2    15882493  9         C|T
2    15882505  6         A|T
3    16882450  6         C|T
3    16882594  6         C|T
3    16882633  6         C|T
3    16882755  6         A|T

예상 출력:

2    15881764  9         C|T
2    15881767  9         C|C
2    15882451  9         C|T
2    15882454  9         C|T
2    15882493  9         C|T
2    15881989  4         C|C
2    15882091  4         G|T
2    15882505  6         A|T
3    16882450  6         C|T
3    16882594  6         C|T
3    16882633  6         C|T
3    16882755  6         A|T

모든 UNIX 기반 유틸리티가 가능하지만 가독성을 위해서는 sort 및 awk가 더 좋습니다.

답변1

sort -k1,1n -k3,3n -k2,2n file

먼저 열 1에서 숫자순으로 정렬합니다.
동점인 경우 3열의 숫자로 정렬하세요.
동점인 경우 2열의 숫자로 정렬하세요.

답변2

sort제 생각에는 세 번째 필드에서 하나를 수행하면 문제가 해결될 것입니다. sort -n -k3최선을 다해 할 수 있는 것입니다.

sort -t$'\t' -n -k3 -k2 -k1 file

당신이 보면man페이지sort-k기본적으로 정렬할 공백으로 구분된 각 행을 나타내는 필드가 표시됩니다 . 이 -t플래그를 사용하면 마지막으로 편집한 문자를 기준으로 구분 기호를 설정할 수 있습니다 Tab .

관련 정보