Sort
排序數值列
我正在嘗試根據特定位置對文件進行排序,但這不起作用,這是數據和輸出。
~/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
。