2013-07-02 4 views
19

네 번째 열을 기준으로이 파일을 정렬하려고합니다. 네 번째 열의 값에 따라 파일의 재정렬을 원합니다.열 정렬 명령에 따라 탭으로 구분 된 파일 정렬 bash

파일 :

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename> 

하지만 불법 변수 이름 오류 :

1 1:10363487:T 0 10363487 
2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 

내가이 명령을 시도 :

2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 
1 1:10363487:T 0 10363487 

나는 다음과 같이 분류 할 수 있습니다. 누군가가 이걸 도와 줄 수 있습니까?

답변

44

네 번째 열을 정렬하려면 셀렉터 -k 4,4 만 사용하십시오.

sort -t $'\t' -k 4,4 <filename> 

더 자연스럽게 숫자를 정렬하는 -V을 원할 수도 있습니다. 예를 들어, 1 10 2 (사전 식 순서)보다는 1 2 10이됩니다.

sort -t $'\t' -k 4,4 -V <filename> 

당신은 쉘이 bash는 있는지 만드는 $'\t'에 대한 오류를 받고있는 경우. 스크립트 상단에 #!/bin/bash이 누락 되었습니까?

+0

같은 오류하지만 .. 불법 변수 이름. 나는 그것을 해결하는 방법을 모른다. 나는 문제가 $ – Vignesh

+1

인 것을 안다'#!/bin/sh' 또는'sh script'가 아닌 bash를 사용하고 있는지 확인하십시오 –

+2

또한'-t' 옵션은 선택 사항입니다. 파일에 "공백"이 있으면 충분합니다. – chepner

3

나는 귀하의 명령에 이상한 $이 있다고 생각합니다.

시도 :

sort -t\t -nk4 
+2

'$ '..''는 확장 이스케이프 시퀀스를위한 bash 구문입니다. 이 경우 리터럴 탭으로 확장됩니다. –

+0

도움이되었지만 1 2 10보다 1 10 2 22로 주문할 수 없습니까? – Vignesh

+1

'-n' 플래그가 수행해야하는 작업입니다 (숫자 정렬). – Phylogenesis

관련 문제