특수 문자를 무시하지 않도록 쉘 정렬의 조합 순서 설정

특수 문자를 무시하지 않도록 쉘 정렬의 조합 순서 설정

postgres에서 정렬하기 위한 솔루션을 찾고 있지만 데이터 정렬 문제가 더 많은 것 같아서 대신 표준 Unix 정렬 명령에 대해 질문합니다.

나는 다음과 같은 데이터를 가지고 있습니다 :

A_A1
A\A2
A_A2
A\A1

정렬 후 나는 다음을 얻습니다.

cat test.txt |sort

A_A1
A\A1
A_A2
A\A2

하지만 나는 원한다:

A_A1
A_A2
A\A1
A\A2

나도 시도했지만 LANG=C cat...소용이 없었습니다. 그렇다면 특수 문자를 무시하지 않는 대조 규칙은 무엇입니까?

답변1

에서 man sort:

Set LC_ALL=C to get the traditional sort order that uses native byte values.

그래서:

$ LC_ALL=C sort test.txt
A\A1
A\A2
A_A1
A_A2

따라서 C 로캘은 바이트 값을 기준으로 정렬됩니다.


당신은해야합니다

$ cat test.txt | LC_ALL=C sort

그렇게 파이프하려는 경우(그러나 사용 가능한 경우 항상 파일 이름 버전을 직접 사용하십시오).


이에 영향을 미치는 기본 환경 변수는 입니다 LC_COLLATE. LC_ALL하지만 설정하면 모든 특정 값보다 우선 합니다 LC_. 또는 LC_ALL둘 다 설정되지 않은 경우에는 LC_COLLATE로 대체됩니다 LANG. 만약에저것설정되지 않은 경우 기본값은 locale 입니다 C.

관련 정보