Por que a classificação está alterando a ordem das linhas com chaves de classificação idênticas?

31

Aqui estão os dados:

D 2
B 2
A 2

Quando executo este comando:

sort -k2,2 file

produz:

A 2
B 2
D 2

Minha pergunta é que, quando eu especifico apenas a segunda coluna -k2,2, por que ela também é classificada pela primeira coluna? Como todos os valores da segunda coluna são iguais, deve deixá-lo como está.

dwwdw
fonte
7
[Semi-OT]: FYI, uma classificação que preserva a ordem de entrada quando as chaves de classificação coincidem e é conhecida na ciência da computação como classificação estável . Geralmente, as classificações não são estáveis, porque muitos algoritmos de classificação não estáveis ​​são mais rápidos ou mais simples. Não é o caso aqui, mas o conhecimento do termo CS torna os documentos da página de manual da -sopção compreensíveis e localizáveis.
Derobert

Respostas:

34

Essa é a comparação do último recurso . Ao comparar duas linhas, se todas as chaves forem iguais, então, como último recurso, é realizada uma comparação básica de cadeias de caracteres de todas as linhas ( -rainda se aplica, mas não as outras opções). Esse comportamento é especificado pelo POSIX :

Exceto quando a opção -u for especificada, as linhas que, de outra forma, serão comparadas serão ordenadas como se nenhuma das opções -d, -f, -i, -n ou -k estivesse presente (mas com -r ainda em vigor, se foi especificado) e com todos os bytes nas linhas significativas para a comparação. A ordem na qual as linhas que ainda se comparam são escritas não é especificada.

Com o GNU sort, essa comparação de último recurso pode ser desativada com a opção -s(para estável ).

Stéphane Chazelas
fonte