'정렬'이 별표와 같은 특수 문자를 무시하는 이유는 무엇입니까?


27

sort공통 접두사를 함께 정렬 한다고 생각 했지만 항상 그런 것은 아닙니다. 이 입력을 예로 들어 보겠습니다.

AT0S*eightieths
AT0S*eyetooth's
AT*ad
AT*Ad
AT*AD
AT*Eydie
AT*eyed
ATF*adv
ATF*ATV
ATF*edify
ATF*Ediva
ATFKT*advocate
ATFKTNK*advocating
ATFKT*outfought
ATFKTS*advocates
ATHT*whitehead
ATHT*Whitehead
AT*id
AT*I'd
AT*Ito
AT*IUD
ATJ*adage
ATNXNS*attention's
ATNXNS*attenuation's
ATNXNS*autoignition's
AT*oat
AT*OD
AT*outweigh
AT*owed
ATP0K*idiopathic
ATP*adobe
ATT*wighted
ATT*witted
ATT*wooded
AT*UT
AT*Uta
AT*wowed
AT*Wyatt
ATX*atishoo

이후 sort에는 모든 것이 AT*하나의 청크로 끝날 것으로 예상 하지만 sort출력 데이터를 통해이 데이터를 실행할 때 ==. 왜 그런가요? 알파벳이 아닌 문자 나 다른 것을 무시하는 옵션을 지정하지 않았습니다. 그냥 sort dict > out.

내 버전은에서 sort제공됩니다 coreutils 8.5-1ubuntu3.


나를 위해 작동합니다. 어딘가에 별칭이 있습니까?
Matthieu Cartier

답변:


17
sort --version-sort filename 

이것은 자연수의 순서를 유지합니다.


4
+1 효과가 있는데 왜? 텍스트에는 한 자리 숫자 만 있습니다.
Aaron Digulla

2
환경을 바꾸지 않아도 작동, +1
Meredith

@AaronDigulla : 버전 정렬의 문자열을 물건을 정렬하는 가장 멍청한 방법으로 취급하므로 로케일을 무시하고 특별한 방식으로 숫자 만 처리합니다.
JohnEye

23

LC_ALL = C를 설정하면 필자의 경우 전통적인 정렬 순서가 복원되었습니다. 패키지 : coreutils 버전 : 8.5-1ubuntu3

export LC_ALL=C 

LANG=C작동합니다. 나를 괴롭히는 것 : LANG로 설정되어 있습니다 en_US.UTF-8. 왜 *여전히 특별하게 취급됩니까?
Aaron Digulla

2
LC_COLLATEsort등 의 설정입니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

Raspbian // Pixel에서 나를 위해 일합니다 ... 특별한 문자를 무시하는 일종의 '불쾌감'은 저를 죽였습니다 ... 감사합니다.
ZEE

2
export로컬로 설정하거나 설정 하지 않아도되고 다른 것을 망칠 수 있습니다. 호출에서 다음을 정렬하도록 설정하십시오 LC_ALL=C sort. 예를 들어 echo -e 'a\n*\n*b\nc' | LC_ALL=C sort, LC_ALL은 정렬 호출 외부에서 변경되지 않습니다
Hashbrown

1

그것은 나를 위해 예상대로 작동합니다 (cygwin에서).

sort input > output 결과

AT * AD
AT * Ad
AT * 에디
AT * 나는
AT * IUD
AT * 이토
AT * OD
AT * UT
AT * Uta
AT * 와이엇
AT * ad
AT * eyed
AT * id
AT * 귀리
AT * 무게
AT * owed
AT * wow
AT0S * 80
AT0S * 아이 투스
ATF * ATV
ATF * 에디 바
ATF * adv
ATF * 수정
ATFKT * 옹호자
ATFKT * 매입
ATFKTNK * 옹호
ATFKTS * 옹호자
ATHT * 화이트 헤드
ATHT * 화이트 헤드
ATJ * adage
ATNXNS *주의
ATNXNS * 감쇠
ATNXNS * 자동 점화
ATP * 아 도베
ATP0K * 특 발병
ATT * 와트
ATT * witted
ATT * wooded
ATX * 아 티슈

정렬이 무언가에 별칭이 있습니까? 시험\sort

또한

환경에 의해 지정된 로케일은 정렬 순서에 영향을줍니다. 기본 바이트 값을 사용하는 기존 정렬 순서를 얻으려면 LC_ALL = C를 설정하십시오.


별칭이 없습니다. 우분투 / 데비안 전용 기능이어야합니다.
Aaron Digulla

1

버전 : 정렬 (GNU coreutils) 8.26

나는 그것을 인라인으로한다 :

LANG=C sort FILE

또는 기능별 (원본 파일 변경) :

dosort() { local file="$*"; LANG=C sort ${file} -o ${file}.swp; mv ${file}.swp ${file}; cat ${file} ;}

1

다른 사람의 의견을 바탕으로 간단한 답변을 제공하면 환경이 바뀌지 않습니다.

input_program | LC_COLLATE=C sort | output_program

또는

LC_COLLATE=C sort < input_file > output_file

또는 이들의 조합.


0

GNU 정렬을 사용하면 다음을 사용할 수 있습니다 --dictionary-order.

NAME
       sort - sort lines of text files

SYNOPSIS
       sort [OPTION]... [FILE]...
       sort [OPTION]... --files0-from=F

DESCRIPTION
       Write sorted concatenation of all FILE(s) to standard output.

       With no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are mandatory for short options too.  Ordering options:

       -b, --ignore-leading-blanks
              ignore leading blanks

       -d, --dictionary-order
              consider only blanks and alphanumeric characters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.