2012-04-03 4 views
1

, wenn eine Datei durch Komma mehrere Spalten, getrennt enthält, wie folgt aus:Was ist der Unterschied zwischen 'sort -k1 file.txt' und 'sort -k1,1 file.txt'?

aaa,1,4,4,5,7 
bbb,1,4,9,1,2 

Gibt es Unterschied zwischen 'sort -t, -k1 file.txt' und ‚sort -t, -k1,1 Datei. txt'? obwohl mit dem obigen Beispiel, gibt es keinen Unterschied, aber in einigen meiner Projekt Fall hat es hat Unterschied, aber der Unterschied spiegelt sich in dem Fall, dass ich die sortierte Datei zu verbinden, und der Join-Befehl löst Ausnahme aus das 'Join: Datei 2 ist nicht in sortierter Reihenfolge' (zu diesem Zeitpunkt verwende ich 'sort -t, -k1 file.txt'). Später benutze ich 'sort -t, -k1,1 file.txt' und Join-Befehl funktioniert dann gut. Kann mir jemand sagen warum?

Antwort

2

sort -k1 bedeutet Sortierung beginnend mit Schlüssel 1 bis zum Ende der Zeile. sort -k1,1 bedeutet Sortieren von Schlüssel 1 zu Schlüssel 1 (also nur der erste Schlüssel). Auf meinem Rechner machen die beide einen Unterschied, ob ich mit -s stabiler Art angeben:

~ $ cat test.txt 
aaa,1,4,4,5,7 
aaa,1,3,9,1,2 

~ $ sort -t, -k1 -s test.txt 
aaa,1,3,9,1,2 
aaa,1,4,4,5,7 

~ $ sort -t, -k1,1 -s test.txt 
aaa,1,4,4,5,7 
aaa,1,3,9,1,2 
+0

Ich habe Ihre Probe versucht, aber wenn ich nicht ‚es‘ Option verwenden, in ‚sort -t, k1, 1 test.txt ', wird auch nach dem linken Schlüssel sortiert, also ist das Ergebnis dasselbe wie' sort -t, -k1 test.txt '. Jetzt bin ich verwirrt, warum ich nur den Schlüssel 1 zum Sortieren angegeben habe, aber wenn der Schlüssel 1 aus zwei Zeilen besteht, wird der Sortierbefehl automatisch nach dem linken Schlüssel sortieren, anstatt sie in die ursprüngliche Reihenfolge zu bringen (weil ohne -s Option?), und das ist nicht was ich will. @Vlad der Impala – jianpx

+0

Deshalb ist das stabile Flag vorhanden :) Wenn Sie nicht angeben, "-s", Sie sind nicht garantiert, eine stabile Art, die Sie suchen, denke ich. Verwenden Sie das Flag "-s", wenn Sie eine stabile Sortierung wünschen. –

2

Die zweite Nummer ist, wo der Sortierschlüssel endet,, die standardmäßig auf das Ende der Zeile. Aus der Manpage:

-k, --key=POS1[,POS2]:
start a key at POS1 (origin 1), end it at POS2 (default end of line)

Also, ja, gibt es einen Unterschied. Nicht im Fall für Ihre Daten, da der 1,1 Sortierschlüssel keine Duplikate hat.

Aber wo Sie die 1,1 Sortierschlüssel angeben, die beiden Linien:

abc,plugh 
abc,xyzzy 

in sortieren können entweder bestellen. Mit nur 1 (dh 1,end-of-line) sortieren sie in der angegebenen Reihenfolge.

Verwandte Themen