2011-08-23 4 views
6

[내가 뒤에서 물어 본 비슷한 질문을 다시 작성한 것입니다.] 혼동을해서 죄송합니다.]UNIX 정렬 유틸리티가 -b 옵션없이 선행 공백을 무시하는 이유는 무엇입니까?

나는 선도 및 표준 sort 유틸리티에 대해 혼동스러워합니다. myfile의 내용을 고려 :

a 
b 
    a 

sort -t : myfile을 실행하는 것은 적어도 나에게 예기치 않은 결과를 얻을 수 : 이해

a 
    a 
b 

합니까를? <space>a-z (ASCII의 경우와 같음) 이전이나 이후에 와야합니다. 가 포함되지 않은 경우 경우 두 번째 경우에

a 
b 
    a 

왜, 다음, sort는 (선행들 무시)를 -b 옵션을 적용하는 것처럼 보인다 동안 첫 번째 경우에서 나는

a 
b 
a 

을 기대 ? 사실, 안전을 위해 각 행에 정확하게 하나의 필드를 갖기 위해 -t 옵션을 추가했습니다. (According to the POSIX standard, "A 필드는 분리되지 않은 문자의 최대 시퀀스로 구성되며 옵션 -t가없는 경우 앞에 오는 필드 구분 기호가 포함됩니다."은 예기치 않은 동일한 출력을 생성합니다.)

미리 감사드립니다. ! 남자 페이지에서

답변

9

지역에 따라 다릅니다.

LC_COLLATE=en_US.utf8 sort myfile 

으로 나는 당신의 예상치 못한 결과를 얻을, 그리고

LC_COLLATE=C sort myfile 

와 나는 당신의 예상 결과를 얻을. 또한 (나는 종류의 -b 처리하는 이유 을 알고이 같은 -t하지 않습니다.) bash sort unusual order. Problem with spaces?

를 참조

+0

1 : 겸손 : –

+0

@Ernest :이 그만! 겸손을 제거했습니다. –

+0

감사합니다! 정렬이 en_US.UTF-8에서 어떻게 작동하는지에 관해서는, 나는 그것을 이해할 수 없다 ... [colletion chart] (http://www.collation-charts.org/opensolaris/opensolaris.2008.05.en_US.UTF- 8.html) en_US.UTF-8에는 A와 B 사이에 공백이 없습니다. –

7
$ sort -t : foo 
a 
    a 
    b 
$ env LC_ALL=C sort -t: foo 
    a 
    b 
a 

: * 경고 * 환경에 의해 지정된 로케일이 정렬 순서에 영향을 미칩니다. 원래의 바이트 값을 사용하는 전통적인 정렬 순서를 얻으려면 LC_ALL = C로 설정하십시오.

관련 문제