Warum ändert sort die Reihenfolge der Zeilen mit identischen Sortierschlüsseln?

31

Hier sind die Daten:

D 2
B 2
A 2

Wenn ich diesen Befehl ausführe:

sort -k2,2 file

es gibt aus:

A 2
B 2
D 2

Meine Frage ist, wenn ich nur die zweite Spalte spezifiziere -k2,2, warum wird dann auch nach der ersten Spalte sortiert? Da alle Werte der zweiten Spalte gleich sind, sollte sie unverändert bleiben.

dwwdw
quelle
7
[Semi-OT]: FYI, eine Sortierung, die die Eingabereihenfolge beibehält, wenn die Sortierschlüssel übereinstimmen, ist in der Informatik als stabile Sortierung bekannt. Oft sind Sortierungen nicht stabil, da viele nicht stabile Sortieralgorithmen schneller oder einfacher sind. Dies ist hier nicht der Fall, aber wenn Sie den CS-Begriff kennen, werden die Hilfedokumente für die -sOption verständlich und auffindbar.
Derobert

Antworten:

34

Das ist das letzte Ausweg Vergleich . Wenn beim Vergleichen von zwei Zeilen alle Schlüssel gleich sind, wird als letzte Möglichkeit ein grundlegender Zeichenfolgenvergleich für die gesamten Zeilen durchgeführt ( -rgilt weiterhin, jedoch nicht für die anderen Optionen). Dieses Verhalten wird von POSIX angegeben :

Sofern nicht die Option -u angegeben ist, werden Zeilen, die ansonsten gleich sind, so angeordnet, als ob keine der Optionen -d, -f, -i, -n oder -k vorhanden wäre (wobei -r jedoch weiterhin aktiv ist, wenn es wurde angegeben) und mit allen Bytes in den Zeilen, die für den Vergleich von Bedeutung sind. Die Reihenfolge, in der noch gleiche Zeilen geschrieben werden, ist nicht festgelegt.

Mit GNU sortkann dieser Vergleich in letzter Instanz mit der Option -s(für Stable ) deaktiviert werden .

Stéphane Chazelas
quelle