2013-07-06 2 views
1

제가 공통적으로 생각해야 할 것이 있습니다 만, 아직 어떤 좋은 해결책도 찾지 못했습니다.유닉스에서 문자열과 숫자를 함께 정렬합니다.

각 줄마다 염색체 번호, 염색체의 시작 위치 및 아래의 관련 값이있는 파일이 있습니다.

1  1.07299851019 1  1.07299851019 HQ  chrY 2845223   +  0.251366120219 46  
1  1.06860686763 1  1.06860686763 HQ  chr10 88595309  +  0.256830601093 47  
1  1.04688316093 3  3.14064948278 HQ  chr6 49126474  +  0.295081967213 54  
1  1.1563829915 1  1.1563829915 HQ  chrX 16428176  +  0.185792349727 34  

이 파일은 염색체 (6 열)와 시작 위치 (7 열) 모두에서 unix sort 명령을 사용하여 정렬하려고합니다. 주변 검색 후 난다면 저를 가지고있는이 함께했다 :

nohup sort -t $'\t' -k 6.4,6.5n -k 7,7n 

내가 해결할 수없는 나머지 문제는 숫자로 번호 염색체 정렬하는 동안 확실히 염색체 X 염색체 Y가 함께 분류되어 있다는 것입니다 다음과 같이 시작 위치에 :

1  0.978579587641 9  8.80721628876 HQ  chrX 2861057 -  0.431693989071 79  
1  0.979500536702 1  0.979500536702 HQ  chrY 2861314 -  0.420765027322 77  
1  0.969979601694 9  8.72981641525 HQ  chrX 2861649 -  0.469945355191 86 

chrX와 chrY를 숫자로 대체하거나이를 해결하기위한 프로그램을 작성하지만, 특히 파일 크기가 대개 크고 반복적으로 수행하기 때문에 간단한 명령을 사용하는 것이 좋습니다.

염색체 22에 위해 1 줄과 경우도 좋을 것이다 다음 X 다음 Y. 내 명령은 염색체 X와 Y는 22

답변

2

에 염색체 1에서 X를 분리하기 위해 먼저 다음 오는했다

nohup sort -t $'\t' -k 6.4,6.5n -k 6 -k 7,7n 

(이 두 행이 필드 6.4,6.5에 해당하는 경우 그 다음 단계는 필드 6 -numer에서 그들을 비교하는 것입니다, 수치와 비교하여 말한다 : Y, 당신은 대체 키를 지정할 수 있습니다 필드 7을 시도하기 전에).

면책 조항 : 그것은 또한 다음 X 염색체 22에 위해 1 줄 경우 좋은 및 것

다음 Y. 내 명령은 염색체를 가지고 있었다 :이 마지막 단락에서 목표를 충족하지 않습니다 XY 여전히 숫자 정렬하는 동안 0으로 처리되기 때문에 X와 Y는 22

먼저 한 후 1 번 염색체 오는 및 대체는 변경되지 않습니다. 어쨌든 유용하다고 생각하길 바랍니다.

나는 예를 들어. [중 & hellip] 숫자로 CHRX 및 chrY를 대체하여

사실, 당신은 즉시 그 교체 할 수 있습니다

sed 's/chrX/chr23/; s/chrY/chr24/' | 
    sort -t $'\t' -k 6.4,6.5n -k 7,7n | 
    sed 's/chr23/chrX/; s/chr24/chrY/' 

(이 명령의 행 구분은 선택 사항 참고를, 나는 그것들을 가독성을 위해 포함 시켰지만, 실제로 원한다면 한 줄에 넣을 수 있습니다.)

+0

가 대단히 ruakh 감사의 SED 명령을 정확히 내가 원하는 걸 해! – user838744

+0

@ user838744 : 환영합니다! – ruakh

2

sort의 버전이 당신은 같은 것을 할 수있는 다음 숫자 열을 정렬하는 의미있는 -V 옵션을 지원하는 경우 :

$ cat file 
1 1.07299851019 1 1.07299851019 HQ chrY 2845223  + 0.251366120219 46 
1 1.06860686763 1 1.06860686763 HQ chr10 88595309 + 0.256830601093 47 
1 1.04688316093 3 3.14064948278 HQ chr6 49126474 + 0.295081967213 54 
1 1.1563829915 1 1.1563829915 HQ chrX 16428176 + 0.185792349727 34 

$ sort -t$'\t' -k6V -k7n file 
1 1.04688316093 3 3.14064948278 HQ chr6 49126474 + 0.295081967213 54 
1 1.06860686763 1 1.06860686763 HQ chr10 88595309 + 0.256830601093 47 
1 1.1563829915 1 1.1563829915 HQ chrX 16428176 + 0.185792349727 34 
1 1.07299851019 1 1.07299851019 HQ chrY 2845223  + 0.251366120219 46 
+0

JS 감사합니다,이게 내가 원하는 것 같다. 불행히도 내 버전은 -V 옵션을 지원하지 않습니다. – user838744

관련 문제