2016-07-05 23 views
1

下面是我在做什麼使用排序-k(2場),只要-g

sort -k 1,2 -g temp2 

而且正在逐漸

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 

但我想在第二場中那些更大的數字較小的數字下面

例如我想的前三行是

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

代替

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

前兩個字符是否總是'hs'?如果沒有,'ab2'在'xy1'之前還是之後排序? :) – hobbs

回答

1

即-k選項是一個場範圍。使用其中的兩個,並且包括在你需要它的通用數值選項:

% 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並不意味着用兩個鍵進行排序,字段1和2這意味着使用關鍵那種由字段1和2的內容組成。使用數字排序時,這根本不起作用。事實上,你可以看到使用--debug,這種做法是決定像hs1 154800000這樣的數值根本不是有效數字(因爲它們不是),並且忽略了你提供的密鑰。你所看到的是「後備排序」的結果,它在整行上進行字母排序,打破鍵之間具有相同值的行之間的聯繫。

什麼工作是其中之一:

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

通過使用多個-k選項我們得到多個排序鍵。

第一種情況下,-k 1,1按字母順序排序第一個字段,-k 2,2g按數字排序第二個字段。

在第二種情況下,-k 1,1.2按字母順序排列第一個字段的前兩個字符; -k 1.3,1g按第一個字段的其餘部分進行數字排序,-k 2,2g按第二個字段的數字排序。

這兩個選項都會爲您的示例輸入生成相同的輸出,因爲前兩個字符始終爲hs,並且沒有多位數字,但正確的選擇取決於您打算在其他情況下發生的情況。

+0

這是一個很好的解釋! –