Unix를 알파벳순으로 정렬한 다음 숫자순으로 정렬하면 예상대로 작동하지 않았습니다.

Unix를 알파벳순으로 정렬한 다음 숫자순으로 정렬하면 예상대로 작동하지 않았습니다.

중복된 질문이라면 죄송합니다. 여기나 문서에서 원하는 답변을 찾을 수 없습니다.

다음과 같은 파일이 있습니다.

chr2_oligo1234  700 750
chr2_oligo1236  750 800
chr1_oligo1 50  100
chr1_oligo256   150 200
chr1_oligo6 3500    3550
chr4_oligo95    50  100
chr5_oligo1 50  100
chr4_oligo4 150 200

원하는 출력은 다음과 같습니다.

chr1_oligo1 50  100
chr1_oligo256   150 200
chr1_oligo6 3500    3550
chr2_oligo1234  700 750
chr2_oligo1236  750 800
chr4_oligo95    50  100
chr4_oligo4 150 200
chr5_oligo1 50  100

시작 부분의 패턴(예: chr#_oligo#)은 chr#에만 관련됩니다. 즉, 모든 chr1이 먼저 오고 그 다음 chr2, 그 다음 chr3 등이 와야 하지만 이러한 하위 문자열을 다음과 같이 그룹별로 숫자로 정렬하고 싶습니다. 원하는 출력은 다음과 같습니다. 위에 표시된. 그래서 각 데이터 덩어리를 첫 번째 열을 기준으로 알파벳순으로 정렬한 다음 해당 순서(chr1->chrN)를 유지하고 각 데이터 덩어리를 숫자순으로 정렬하는 방법을 알고 싶습니다.

내 표현이 질문에 맞지 않거나 반복적이라면 사과드립니다. 노력하다

sort -k1,1 -nk2

숫자상으로는 올바르게 정렬되지만 첫 번째 정렬은 그대로 유지되지 않습니다(첫 번째 열을 섞고 다음과 같이 모든 행을 열 2와 3과 함께 배치합니다.)

50   100

저는 Mac OS X를 사용하고 있습니다.

편집: 내가 찾고 있는 내용을 더 많이 표시하기 위해 첫 번째 열의 일부 예를 변경하고 싶습니다. gsort -V는 첫 번째 열의 이름이 숫자순으로 되어 있으면 잘 작동하지만 내 데이터세트에서는 항상 그런 것은 아닙니다.

기본적으로 각 하위 그룹(이 경우 chr1, chr2 등)을 열 2를 기준으로 반복적으로 정렬하고 싶습니다. 각 명령을 greping한 다음 열 2에서 정렬하면 이 작업을 쉽게 수행할 수 있다는 것을 알고 있지만 sort 또는 다른 unix 명령이 이 작업을 자체적으로 수행할 수 있는지 궁금합니다.

답변1

sort -k1,1 -nk2와 동일하다 sort -k1,1 -n -k2, 동일하다 sort -n -k1,1 -k2, 동일하다수치정렬은 모든 키에 대해 전역적으로 활성화됩니다.

두 번째 키를 숫자로만 정렬 하려면 n해당 정렬 키 설명에 다음과 같이 추가해야 합니다.

sort -k1,1 -k2n

또는:

sort -k1,1 -k2,2n

사용은 n기본 필드 구분 기호를 사용하는 것과 2같습니다 2,2. 은 두 번째 필드로 시작하는 줄의 일부이지만 숫자로 해석되면 두 번째 필드만( ) 2과 동일합니다 .2,2

여기에서 다음 숫자를 숫자순으로 정렬한 chr다음 첫 번째 필드의 나머지 부분을 알파벳순으로, 두 번째 필드를 숫자순으로 정렬할 수도 있습니다.

sort -k1.4n -k1,1 -k2n

답변2

첫 번째 필드에서는 알파벳순으로 정렬하고 두 번째 필드에서는 숫자순으로 정렬합니다(출력에서 --chr4_oligo95는 ch4_oligo4 앞에 옵니다).

sort -k1,1 -k2n,2n file 
chr1_oligo1 50  100
chr1_oligo256   150 200
chr1_oligo6 3500    3550
chr2_oligo1234  700 750
chr2_oligo1236  750 800
chr4_oligo4 150 200
chr4_oligo95    50  100
chr5_oligo1 50  100

관련 정보