当数字相等时按数字排序,但不按字母顺序排序

时间:2018-06-25 08:27:44

标签: linux bash sorting

我有一个像这样的文件:

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

但是任何随机顺序都可以。

2 个答案:

答案 0 :(得分:2)

您可以使用以下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列; 随机

答案 1 :(得分: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