중복된 질문이라면 죄송합니다. 여기나 문서에서 원하는 답변을 찾을 수 없습니다.
다음과 같은 파일이 있습니다.
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