C언어

sort backslash

고요한하늘... 2014. 8. 19. 10:26

파일에 다음과 같이 값이 들어 있다고 할때

##########################

1

2

3

\

'

##########################


위 파일을 정렬을 했더니

##########################

\

'

1

2

3


##########################

처럼 되었다. code 값을 찍어보니 \는 ascii table에서 97이거 '는 39이다.

backslash는 라인이 끝나지 않았음을 표시하기도 하는데

지금은 딱 그상황이다.

\를 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\로 바꿔도 정렬순서는 변하지 않는다.

C로 코딩한 프로그램에서는 \를 하나의 문자로 읽어 비교를 하게 돼 파일이 정렬돼 있다는 가정이 틀리게 된다.


이를 회피하는 방법을 sort 명령에서 찾으려 했으나 실패하고

man sort의 마지막 설명

 *** WARNING *** The locale specified by the environment affects sort order.  Set LC_ALL=C to get the traditional sort order that uses native byte values.

을 보면 LC_ALL=C로 설정하고 정렬을 했더니

##########################
'
1
2
3
\
##########################
참 ...아직도 모르는게 너무 많구나..


LC_ALL=C로 모든 locale을 바꿀수도 있지만

LC_COLLATE=C만 해줘도 동일한 결과를 얻을수 있다.

LC_COLLATE를 설정해주면 strcmp와 동일한 결과를 얻을수 있다.

'C언어' 카테고리의 다른 글

large file or large memory  (0) 2014.11.24
mmap 삽질  (0) 2014.11.14
const 포인터( pointer )  (0) 2014.06.25
suggest parentheses around assignment used as truth value  (0) 2014.06.11
valgrind test  (0) 2014.06.03