리눅스 정렬의 기본 순서는 무엇입니까?


18

오랫동안 나는 sort프로그램 의 기본 동작이 ASCII 순서를 사용 하고 있다고 생각했습니다 . 그러나 sort인수없이 다음 줄을 입력하면

#
@

나는 얻었다 :

@
#

그러나 ASCII 테이블에 따르면 #35 @는 64 이고 다른 예는 다음과 같습니다.

A
a

그리고 출력은 다음과 같습니다

a
A

아무도 이것을 설명 할 수 있습니까? 그건 그렇고, 사용할 때 '사전 순서'는 무엇 sort -d입니까?


5
정렬 순서는 지역 설정에 따라 다릅니다.
janneb

2
그러나 최소한 GNU 정렬에서는 기본적으로 알파벳 순서입니다.
jarno

답변:


17

POSIX 이외의 로케일을 사용하고있는 것 같습니다.

시험:

export LC_ALL=C

다음 sort.

info sort 분명히 말한다 :

(1) POSIX 이외의 로케일을 사용하는 경우 (예를 들어,`LC_ALL '을`en_US'로 설정하면)`sort '는 익숙한 것과 다르게 정렬 된 출력을 생성 할 수 있습니다. 이 경우`LC_ALL '환경 변수를`C'로 설정하십시오. 'LC_COLLATE'만 설정하면 두 가지 문제가 있습니다. 먼저 'LC_ALL'도 설정하면 효과가 없습니다. 둘째,`LC_CTYPE '(또는`LC_CTYPE'이 설정되지 않은 경우`LANG ')이 호환되지 않는 값으로 설정되면 동작이 정의되지 않습니다. 예를 들어,`LC_CTYPE '이`ja_JP.PCK'이지만`LC_COLLATE '가`en_US.UTF-8'인 경우 정의되지 않은 동작이 발생합니다.


3
OP는 정렬 순서를 바꾸는 방법이 아니라 정렬 순서를 묻습니다.

1
고마워, 나는 내 컴퓨터에서 테스트했고 로케일 설정은 정렬 동작에 영향을 미칩니다

3

정렬 순서를 결정하려면 각 줄에 다른 문자를 가진 파일을 만들고 정렬하십시오. 결과 출력은 정렬 순서를 알려줍니다.



1
일반적으로 매우 좋은 생각이지만 항상 충분하지는 않습니다. 데이터 정렬은 개별 문자에만 정의 할 필요는 없습니다. 일부 데이터 정렬은 "ae"를 합자처럼 취급하거나 합자를 분해 된 것처럼 취급합니다. 또 다른 경우는 많은 데이터 정렬이 'a'와 'A'를 동일하게 취급하지만 테스트를 통해 표시되는 순서는이를 알려주지 않습니다 (정렬이 안정적인지 여부를 알 수 있음). 그리고 단일 문자 테스트는 탭 확장, 공백 정규화 등이 적용되는지 여부를 나타내지 않습니다. 그럼에도 불구하고 시작하기에 매우 좋은 곳입니다.
TextGeek

1
(이전 주석을 편집하기에는 너무 늦음)-실제로 충분히 다양한 문자를 포함하는 한, abAB 대신 aAbB를 보지 않도록 대소 문자를 구분할 수 있습니다.
TextGeek

2

으로 man sort말한다, "사전 주문"수단 "은 공백 문자와 숫자로 생각". 예를 들어 데이터가 주어지면

The
!quick
brown
@fox
jumps
#over
17
$lazy
  dogs
%42
times.

비공식 sort명령으로

  dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.

(공간 문자와로 시작하는 라인 퍼팅 !, #, $, %, 및 @문자 문자와 숫자로 시작하는 라인의 전방, 즉, 알파벳 문자 ) 만 sort -d생산

  dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.

  dogs공백으로 시작하기 때문에 여전히 첫 번째이지만 특수 (구두) 문자는 무시됩니다.  17이전에 제공 42하고, fox사이에 제공 brown하고 jumps있다는 사실에도 불구 42하고 fox일반적으로 전에 그들을 움직일 것입니다 그들의 앞에 문자가 17.
____________
1 의 ASCII 값 순서 : space = 040, != 041, #= 043, $= 044, %= 045 및 @= 0100 (스페이스 바를 무시하고) 이것은 일부 키보드에서 대략 왼쪽에서 오른쪽 순서입니다.


1
문장 부호에서 텍스트가 먼저 정렬되는 첫 번째 예의 순서는 적용되는 로케일이 C (LC_ALL = C와 동일)이지만 다른 로케일이 아닌 경우 발생할 수 있습니다. 어떤 로케일이 기본값인지 는 OS 설정에 따라 다릅니다. 따라서 많은 배포판에서 꾸미지 않은 sort 것이 달라야합니다.
Isaac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.