2016-07-05 1 views
1

Hier ist, was ichsort -k Verwendung (mit 2 Felder), solange -g

sort -k 1,2 -g temp2 

tun und bin

hs1 154800000 247249719 3 
hs1 27800000 120700000 4 
hs1 27800000 124300000 4 
hs0000 71800000 9 
hs0000 87200000 2 
hs3 54400000 74200000 15 
hs4 76500000 155100000 20 
hs4 76500000 182600000 3 
hs4 76500000 88200000 77 
hs4 88200000 124000000 2 
hs5 58900000 180857866 8 
hs5 58900000 76400000 2 
hs5 58900000 97300000 4 
hs5 76400000 143100000 14 
hs5 97300000 147200000 6 
hs6 63500000 70000000 73 
hs6 63500000 92100000 4 
hs6 7000000 29900000 2 
hs6 70000000 113900000 70 
hs6 70000000 139100000 57 
hs6 92100000 113900000 3 

bekommen Aber ich will diese größere Zahlen im zweiten Feld unter den kleineren Zahlen

zum Beispiel möchte ich die ersten drei Zeilen

hs1 27800000 120700000 4 
hs1 27800000 124300000 4 
hs1 154800000 247249719 3 
01 sein

statt

hs1 154800000 247249719 3 
hs1 27800000 120700000 4 
hs1 27800000 124300000 4 
+0

Sind die ersten beiden Zeichen immer 'hs'? Wenn nicht, sortiert "ab2" vor oder nach "xy1"? :) – hobbs

Antwort

1

Das -k Option ein Feldbereich ist. Verwenden Sie zwei von ihnen, und umfassen die allgemeine numerische Option, wo Sie es brauchen:

% sort -k1,1 -k2,2g temp2 
hs1 27800000 120700000 4 
hs1 27800000 124300000 4 
hs1 154800000 247249719 3 
hs0000 71800000 9 
hs0000 87200000 2 
hs3 54400000 74200000 15 
hs4 76500000 155100000 20 
hs4 76500000 182600000 3 
hs4 76500000 88200000 77 
hs4 88200000 124000000 2 
hs5 58900000 180857866 8 
hs5 58900000 76400000 2 
hs5 58900000 97300000 4 
hs5 76400000 143100000 14 
hs5 97300000 147200000 6 
hs6 7000000 29900000 2 
hs6 63500000 70000000 73 
hs6 63500000 92100000 4 
hs6 70000000 113900000 70 
hs6 70000000 139100000 57 
hs6 92100000 113900000 3 
2

-k 1,2 bedeutet nicht, zu sortieren, zwei Tasten, Felder 1 und 2. Es bedeutet, zu sortieren, mit einem einzigen Schlüssel, besteht aus den Inhalten der Felder 1 und 2 zusammen. Bei der numerischen Sortierung funktioniert dies nicht gut. In der Tat kann man mit --debug sehen, dass welche Art tut ist zu entscheiden, dass Werte wie hs1 154800000keine gültigen Zahlen bei allen (weil sie nicht sind), und die mitgelieferten Schlüssel zu ignorieren. Was Sie sehen, ist das Ergebnis der „Ausweich Art“, die auf der ganzen Linie eine alphabetische Sortierung der Fall ist, die Beziehungen zwischen Linien zu brechen, die gleiche Werte für die Schlüssel haben.

Was Arbeit tut, ist eine davon:

sort -k 1,1 -k 2,2g temp2 
sort -k 1,1.2 -k 1.3,1g -k 2,2g temp2 

Durch mehrfaches mit -k Optionen, die wir mehrere Sortierschlüssel zu bekommen.

Im ersten Fall sortiert -k 1,1 das erste Feld alphabetisch und -k 2,2g sortiert das zweite numerisch.

Im zweiten Fall -k 1,1.2 alphabetisch sortiert nach den ersten beiden Zeichen des ersten Feldes; -k 1.3,1g Arten numerisch durch den Rest des ersten Feldes und -k 2,2g Arten numerisch durch das zweite Feld.

Beide Optionen erzeugen den gleichen Ausgang für Ihre Beispieleingabe, da die ersten zwei Zeichen immer hs sind und es keine mehrstelligen Zahlen gibt, aber die richtige Wahl hängt davon ab, was Sie in anderen Fällen vorhaben.

+0

Das ist eine großartige Erklärung! –

Verwandte Themen