Perché l'ordinamento sta cambiando l'ordine delle linee con chiavi di ordinamento identiche?


31

Ecco i dati:

D 2
B 2
A 2

Quando eseguo questo comando:

sort -k2,2 file

produce:

A 2
B 2
D 2

La mia domanda è che quando specifico solo la seconda colonna -k2,2, perché ordina anche per la prima colonna? Poiché tutti i valori della seconda colonna sono uguali, dovrebbe lasciarlo così com'è.


7
[Semi-OT]: FYI, un ordinamento che conserva l'ordine di input quando la corrispondenza dei tasti di ordinamento è noto nell'informatica come ordinamento stabile . Spesso gli ordinamenti non sono stabili, perché molti algoritmi di ordinamento non stabili sono più veloci o più semplici. Non è il caso qui, ma conoscere il termine CS rende -scomprensibili e reperibili i documenti manpage per l' opzione.
derobert,

Risposte:


34

Questo è l' ultimo confronto tra resort . Quando si confrontano due linee, se tutte le chiavi sono uguali, quindi come ultima risorsa, viene eseguito un confronto di stringhe di base di tutte le linee ( -rsi applica comunque ma non le altre opzioni). Tale comportamento è specificato da POSIX :

Tranne quando viene specificata l'opzione -u, le righe che altrimenti si equivalgono devono essere ordinate come se nessuna delle opzioni -d, -f, -i, -n o -k fosse presente (ma con -r ancora attivo, se è stato specificato) e con tutti i byte nelle righe significative per il confronto. L'ordine in cui vengono scritte le righe che ancora confrontano uguali non è specificato.

Con GNU sort, il confronto di ultima istanza può essere disabilitato con l' opzione -s(per stabile ).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.