오랫동안 나는 프로그램의 기본 동작이 sort
ASCII 순서를 사용하는 것이라고 생각했습니다. 그러나 매개변수 없이 다음 줄을 입력하면 다음과 같습니다 sort
.
#
@
나는 가지고있다:
@
#
하지만 ASCII 테이블에 따르면 #
35와 64입니다 @
. 다른 예시:
A
a
출력은 다음과 같습니다
a
A
누구든지 이것을 설명할 수 있나요? 그런데 이것을 사용할 때 "사전순서"란 무엇입니까 sort -d
?
답변1
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"인 경우 정의되지 않은 동작이 발생합니다.
답변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.
(공백 문자로 시작하는 줄과 문자 및 숫자로 시작하는 줄 앞에 !
, #
, $
, 기호 1을 배치합니다 . 즉,%
@
영숫자), 그러나 sort -d
생산
dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.
dogs
공백으로 시작하기 때문에 여전히 첫 번째이지만 특수(구두점) 문자는 무시됩니다. 와 17
사이에는 일반적 으로 이전 문자로 이동하는 문자가 앞에 옵니다 . ____________ 1ASCII 값 순서: 공백=040, =041, =043, =044, =045 및 =0100. 일부 키보드에서는 대략 왼쪽에서 오른쪽 순서라는 점에 유의하세요(스페이스바 무시).42
fox
brown
jumps
42
fox
17
!
#
$
%
@
답변3
정렬 순서를 결정하려면 각 줄마다 다른 문자를 사용하여 파일을 만들고 정렬하면 됩니다. 결과 출력은 정렬 순서를 알려줍니다.