Sort
當同時選擇列與同時選擇列時,Bash 數字排序會給出不同的結果
對於以下範例數據,兩列都是數字,但第二列的位數不同。
2 9 1 1000 1 50 3 0
我想根據兩列進行排序。用數字標誌單獨指定它們
-n
會產生我想要的結果。sort -n -k1,1 -k2,2 num.data.txt
給
1 50 1 1000 2 9 3 0
這就是我想要的。
然而,
sort -n -k1,2 num.data.txt
給出似乎按字母順序排序的數據:
1 1000 1 50 2 9 3 0
我知道這
sort -n -k1,2 num.data.txt
與sort -n num.data.txt
只有兩列時(給出相同的結果)相同,但我實際使用的數據有更多列。為什麼這兩種方法之間存在這種差異?
-k1,2
鍵規範指定一個鍵,該鍵從第一列的開頭開始(包括前導空白,因為預設的列分隔符是從非空白到空白的過渡)並在第二列的末尾結束。重要的是要意識到它只是一把鑰匙。如果您需要兩個鍵,則需要兩個
-k
選項。排序時,sort
會將"1 50"
字元串與"1 1000"
數字進行比較。對於數字比較,通過考慮看起來像有效數字的前導部分(忽略前導空格)將這些字元串轉換為數字。所以我們將比較1
和1
。當它們相等時,sort
將恢復到備份排序來確定關係,這是對整行的詞法比較。With
-n -k1,1 -k2,2
,sort
比較and 然後因為它是"1"
平局"1"
,考慮第二個鍵(" 50"
vs" 1000"
)。由於它是數字排序,-n -k1 -k2
因此也可以使用(其中-k1
指定從第一個欄位開始並在行尾結束的鍵,與整行相同)。