Ordena --unique -k drop duplicatas na ordem original?

2

Estou fazendo uma classificação única em um conjunto concatenado de arquivos de índice, onde a primeira coluna às vezes muda entre cada índice e a segunda coluna será um valor de chave (na verdade, endereços hexadecimais). Cada iteração do arquivo indexN registra os endereços que foram alterados desde o anterior - se o endereço 0xaa11 existir no index3, na saída mesclada + classificada ele deverá substituir as referências de endereço 0xaa11 do index1 e do index2.

A questão é, posso fazer esse tipo de mesclagem confiável com uma ferramenta como o GNU sort se eu simplesmente enviar cada índice de origem para sort -u em uma determinada ordem?

Por exemplo, indexe os índices mais recentes para os mais antigos:

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

Quando eu testo isso, parece preservar as linhas de index3 contendo endereços que também aparecem em index2 e index1, enquanto remove as referências duplicadas vindas de index2 e index1.

Mas será que sempre é o caso? A página sort man é vaga sobre isso:

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

Não sei o suficiente sobre os algoritmos do GNU sort para prever se as linhas com chaves correspondentes serão sempre classificadas na mesma ordem em que seus arquivos de origem foram concatenados (por exemplo, a ordem em que aparecem no fluxo de origem). Mas eu sei que algoritmos de classificação nem sempre funcionam de forma linear. É por isso que estou procurando esclarecimentos sobre qual tipo de documentação parece implicar.

    
por tasket 22.11.2018 / 07:02

1 resposta

3

sort não garante a ordem das linhas que são iguais para seus propósitos, a menos que você solicite explicitamente isso com a opção -s ( --stable : stabilize sort desativando a comparação de último recurso) - um algoritmo de classificação estável é aquele que não altera a ordem dos itens iguais.

No entanto, a página de informações informa que -u "também desativa a comparação de último recurso padrão ", então sim, você deve estar bem, mas não é totalmente óbvio na manpage.

    
por 22.11.2018 / 07:35