簡體   English   中英

使用bash排序按多列對文件排序

[英]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 ,其中KEYDEFF[.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM