Sort

排序數值列

  • January 14, 2020

我正在嘗試根據特定位置對文件進行排序,但這不起作用,這是數據和輸出。

~/scratch$ cat  id_researchers_2018_sample 
id - 884209 , researchers - 1
id - 896781 , researchers - 4
id - 901026 , researchers - 15
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 916197 , researchers - 1
~/scratch$ sort  -k 28,5 id_researchers_2018_sample 
id - 884209 , researchers - 1
id - 896781 , researchers - 4
id - 901026 , researchers - 15
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 916197 , researchers - 1

我想按最後一列中的數字對其進行排序,如下所示:

id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15

您打算按第 7 列的數字進行排序。

這可以通過任何一個來完成

$ sort -n -k 7 file
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15

或與

$ sort -k 7n file
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15

這些是等價的。

-n選項指定數字排序(與字典排序相反)。在上面的第二個範例中,n將作為說明符/修飾符添加到第 7 列。

排序鍵列 的規範-k 7將使sort第 7 列上的行開始排序(從第 7 列到末尾的行)。在這種情況下,由於第 7 列是最後一列,因此僅表示這一列。如果這很重要,您可能想-k 7,7改用(“從第 7 列到第 7 列”)。

如果兩個鍵比較相等,sort將使用完整的行作為排序鍵,這就是我們得到範例中前四行結果的原因。如果您想對第二列進行二次排序,您將使用sort -n -k 7,7 -k 2,2, 或sort -k 7,7n -k 2,2n(分別為每列指定比較類型)。同樣,如果第 7列第 2 列在兩行之間比較相同,sort則將使用完整行的字典比較。


要對字元位置 29 進行數字排序,該位置對應於範例數據中每行末尾的數值的第一位:

$ sort -k 1.29n file
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15

意思是“對第一個欄位的第 29 個字元-k 1.29n給出的鍵進行排序(從數字上到行尾)”。

上面文本中-k 7,7n使用的恰好等價於-k 7.1,7.1n

引用自:https://unix.stackexchange.com/questions/562121