[英]Sorting a file by multiple columns using bash sort
這是我正在使用的文件
word01.2 10 25
word01.2 30 50
word01.1 10 30
word01.1 40 50
word01.2 40 50
word01.1 10 20
word01.1 5 8
當我嘗試排序命令時
sort -k1,1 -k2,2 -k3,3 file.txt
我收到以下信息; 我不明白為什么第2行和第1行未排序,它們應該處於相反的位置
word01.1 10 30
word01.1 10 20
word01.1 40 50
word01.1 5 8
word01.2 10 25
word01.2 30 50
word01.2 40 50
當我嘗試將-g添加到排序時,排序后的文件出現更多問題,列1不再排序
sort -k1,1 -gk2,2 -gk3,3 file.txt
word01.1 5 8
word01.1 10 20
word01.2 10 25
word01.1 10 30
word01.2 30 50
word01.1 40 50
word01.2 40 50
我想要的結果是
word01.1 5 8
word01.1 10 20
word01.1 10 30
word01.1 40 50
word01.2 10 25
word01.2 30 50
word01.2 40 50
您也可以在一個KEYDEF中組合2-3個字段,例如
$ sort -k1,1 -k2,3n file
輸出量
word01.1 5 8
word01.1 10 20
word01.1 10 30
word01.1 40 50
word01.2 10 25
word01.2 30 50
word01.2 40 50
您沒有使用-n
/ --numeric-sort
選項來根據字符串數值而不是按字典順序(至少對於第二和第三字段)進行排序:
$ sort -k1,1 -k2,2n -k3,3n file.txt
word01.1 5 8
word01.1 10 20
word01.1 10 30
word01.1 40 50
word01.2 10 25
word01.2 30 50
word01.2 40 50
請注意,您可以提供全局-n
標志,以按數值或按鍵對所有字段進行排序。 鍵的格式為-k KEYDEF
,其中KEYDEF
為F[.C][OPTS][,F[.C][OPTS]]
, OPTS
為一個或多個排序選項 ,例如n
(數字), r
(反向) , g
(通用數字), h
(人類數字)等。
回答
$ sort -k1,1 -k2,2n -k3,3n file.txt
在每種情況下,randomir提供的信息都是正確的。
下面提到的由David C. Randin粘貼的組合選項無法發揮核心作用,因為它僅比較第三列中的第一位。
$ sort -k1,1 -k2,3n file
即以下粘貼的文件將無法正確排序:
word01.2 10 25
word01.2 30 50
word01.1 10 30
word01.1 40 50
word01.2 40 50
word01.1 10 20
word01.1 5 8
word01.1 410 50
word01.1 45 120
word01.1 45 100
word01.1 45 1000
word01.1 40 6
我建議第一個選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.