리눅스에서 sort 프로그램으로 뭔가를 정렬할 경우 strcmp를 사용한 것 처럼 순수하게 바이너리 순서로 정렬하지 않기 때문에 기대한 것과 다른 결과가 나오는 경우가 많다.

+bbb
-aaa
1
11
2
iNfz
zzzz

바이너리 순으로 정렬된 위 데이터를 정렬할 때 옵션에 따라 어떻게 차이가 생기는지 테스트를 해보자.

-d (Dictionary Order)

정렬할 때 알파벳, 숫자, 공백문자만을 고려하고 나머지는 무시한다.

1
11
2
-aaa
+bbb
iNfz
zzzz

-, + 문자가 무시되고 있다.

-g (General Numeric Sort)

일반적인 숫자 값에 따라 비교한다.

+bbb
-aaa
zzzz
1
2
11
iNfz

iNfz 라는 값이 infinite(=inf) 값으로 취급된다.

-n (Numeric Sort)

문자열 숫자값에 따라 비교한다.

+bbb
-aaa
iNfz
zzzz
1
2
11

바이트 순서대로 정렬하기

기본적은 정렬은 쉘에 설정된 로케일에 영향을 받기 때문에 아래처럼 환경변수 LC_ALL 값을 C 로켈로 설정해야 한다.

export LC_ALL=C

설정 후 옵션 없이 정렬하면 바이트 순서로 정렬이 된다.