2013년 11월 27일 수요일

리눅스 정렬 명령 (sort) - 고급 정렬 기준

다음 글들은, 이 글을 쉽게 이해하기위해 도움이 될만한 것들이다:

음.. 일단은, 이 글에서 풀 문제를 명확히 하기 위해서 sort -k1,1 -k2,2 people.txt를 해 보자. (이 명령을 이해하려면 이 글을 보라.)
아, 물론, 입력 파일 (people.txt) 은:

Rammus 420 255 50 335
Lucian 390 230 46 330
Kennen 403 200 47 335
Darius 426 200 50 340
Anivia 350 257 48 325
Ezreal 350 235 47 325
Aatrox 395   0 55 345
Graves 410 255 51 330
Draven 420 240 47 330
그리고, 명령 실행 결과는:
Aatrox 395   0 55 345
Anivia 350 257 48 325
Darius 426 200 50 340
Draven 420 240 47 330
Ezreal 350 235 47 325
Graves 410 255 51 330
Kennen 403 200 47 335
Lucian 390 230 46 330
Rammus 420 255 50 335
이다.

위 결과에서, Aatrox의 두 번째 필드 (395) 가 Anivia의 두 번째 필드 (350) 보다 큰 데도 AatroxAnivia보다 앞에 있는 것을 알 수 있다.
그 이유는, AatroxAnivia보다 영어사전식 순서에서 앞서 있기 때문이다.
(영어사전식 순서에서 AaAn보다 앞서는 것이다.)

그럼, 이런 건 어떨까?
첫 필드 (Rammus, Lucian, Kennen, ...) 는 첫 글자로만 정렬되게 하려면?
그러니까, 이 기준에서는 AatroxAnivia는 영어사전식 정렬에서 비기는 게 되는 것이다.
(왜냐하면 둘 다 첫 글자가 A 니까.)
이 때 필요한 명령어는:

sort -k1,1.1 -k2,2 people.txt
이다.

-k1,1.1을 주목하라.
여기서 .1은, "첫 글자만 보겠다"라는 뜻이다.
명령의 실행 결과는:

Anivia 350 257 48 325
Aatrox 395   0 55 345
Draven 420 240 47 330
Darius 426 200 50 340
Ezreal 350 235 47 325
Graves 410 255 51 330
Kennen 403 200 47 335
Lucian 390 230 46 330
Rammus 420 255 50 335
AniviaAatrox는 첫 번째 필드값 (Anivia, Aatrox) 에서 비겼기 때문에, 두 번째 필드값 (350, 395) 의 순서에 따라 정렬됐음에 주의!

리눅스 정렬 명령에 관한: 이전 글 다음 글