簡體   English   中英

在數字相等時按數字排序但不按字母順序排序

[英]Sorting numerically but not alphabetically when numbers are equal

我有一個這樣的文件:

A 0.77
C 0.98
B 0.77
Z 0.77
G 0.65

我想按降序對文件進行數字排序。 我用過這段代碼:

sort -gr -k2,2 file.txt

我得到了這個:

C 0.98 
Z 0.77
B 0.77
A 0.77
G 0.65

在我的真實文件中,我有幾個具有相同編號的列,它們按字母順序排序。 我想要的是在數字相等的情況下按數字排序但不按字母順序排序,我想按字母順序獲取那些未排序的列:

C 0.98
B 0.77  
Z 0.77
A 0.77
G 0.65

但任何隨機順序都沒問題。

你可以使用這種sort

sort -k2rn -k1R file

C 0.98
B 0.77
Z 0.77
A 0.77
G 0.65

使用了2種排序選項:

  • -k2rn :第一個排序鍵是第2列; 數字,反向
  • -k1R :第二個排序鍵是第1列; 隨機

一個在GNU awk中保留第一個字段的順序(隨機輸入,同樣隨機輸出):

$ awk ' {
    a[$2]=a[$2] (a[$2]==""?"":FS) $1       # append $1 values to hash, indexed on $1
}
END {
    PROCINFO["sorted_in"]="@ind_num_desc"  # set for traverse order for index order...
    for(i in a) {                          # ... and use it here
        n=split(a[i],b)
        for(j=1;j<=n;j++)                  # preserve the input order
            print b[j],i                   # output
    }
}' file
C 0.98
A 0.77
B 0.77
Z 0.77
G 0.65

測試逆序:

$ tac file | awk '# above awk script'
C 0.98
Z 0.77
B 0.77
A 0.77
G 0.65

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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