sort --unique -k는 원래 순서대로 중복 항목을 제거합니까?

sort --unique -k는 원래 순서대로 중복 항목을 제거합니까?

나는 연결된 인덱스 파일 집합에 대해 고유한 정렬을 수행하고 있습니다. 여기서 첫 번째 열은 때때로 각 인덱스 사이에서 변경되고 두 번째 열은 키 값(실제로는 16진수 주소)이 됩니다. 각 indexN 파일 반복은 이전 파일 이후 변경된 주소를 기록합니다. 주소 0xaa11이 인덱스 3에 존재하는 경우 병합+정렬 출력에서 ​​인덱스 1과 인덱스 2의 0xaa11 주소 참조를 바꿔야 합니다.

문제는 이런 유형의 병합을 할 수 있느냐는 것입니다.안정적으로각 소스 인덱스를 특정 순서로 파이프 하면 sortGNU와 같은 도구를 사용할 수 있습니까?sort -u

예를 들어 파이프라인은 최신 항목부터 오래된 항목 순으로 인덱싱됩니다.

cat index3 index2 index1 | sort -u -k 2,2

이것을 테스트했을 때 index2와 index1에도 나타나는 주소가 포함된 index3의 행을 유지하는 동시에 index2와 index1에서 중복 참조를 제거하는 것처럼 보였습니다.

하지만 그럴까요?언제나그렇습니까? 매뉴얼 sort페이지는 이에 대해 모호합니다.

-u --unique   output only the first of an equal run

나는 일치하는 키가 있는 행이 항상 소스 파일이 연결된 순서(즉, 소스 스트림에 나타나는 순서)로 정렬되는지 여부를 예측하는 GNU 정렬 알고리즘에 대해 충분히 알지 못합니다. 하지만 정렬 알고리즘이 항상 선형 방식으로 작동하는 것은 아니라는 것을 알고 있습니다. 그렇기 때문에 문서가 암시하는 바에 대한 설명을 찾고 있습니다.

답변1

sort스위치 -s( --stable: 최후 비교를 비활성화하여 안정적인 정렬)를 사용하여 명시적으로 요청하지 않는 한 행의 순서는 목적에 따라 동일하다고 보장되지 않습니다. 안정적인 정렬 알고리즘은 동일한 항목의 원래 순서를 변경하지 않는 알고리즘입니다. 연산.

하지만, 그정보 페이지"기본 최후의 수단 비교도 비활성화되어 있습니다" 라는 메시지가 표시되므로 -u예, 괜찮을 것입니다. 하지만 맨페이지에서는 전혀 명확하지 않습니다.

관련 정보