정렬이 동일한 정렬 키를 사용하여 행 순서를 변경하는 이유는 무엇입니까?

정렬이 동일한 정렬 키를 사용하여 행 순서를 변경하는 이유는 무엇입니까?

데이터는 다음과 같습니다.

D 2
B 2
A 2

이 명령을 실행할 때:

sort -k2,2 file

다음과 같이 출력됩니다.

A 2
B 2
D 2

내 질문은 두 번째 열만 지정할 때 -k2,2첫 번째 열을 기준으로 정렬하는 이유는 무엇입니까? 두 번째 열의 값은 모두 동일하므로 그대로 유지해야 합니다.

답변1

이것은최후의 수단 비교. 두 행을 비교할 때 모든 키가 동일하다고 비교되면 최후의 수단으로 전체 행에 대해 기본 문자열 비교가 수행됩니다( -r여전히 적용되지만 다른 옵션은 적용되지 않음). 이 동작은 다음으로 인해 발생합니다.POSIX:

-u 옵션이 지정되지 않는 한, 같음을 비교하는 행은 -d, -f, -i, -n 또는 -k 옵션이 없는 순서로 정렬되어야 합니다(그러나 옵션이 있는 경우 -r은 여전히 ​​유효합니다). 지정) 및 모든 바이트의 행은 비교에 중요합니다. 행이 동일한지 비교되는 순서는 지정되지 않은 순서로 기록됩니다.

GNU의 경우 sort/ -s옵션 을 사용하여 --stable마지막 비교를 비활성화할 수 있습니다 .


¹ GNU에서 사용하는 정렬 알고리즘이 sort다르기 때문에안정적인이므로 마지막 비교를 비활성화하면 안정적인 정렬이 이루어집니다. .

관련 정보