我有一个像这样的文件:
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
但是任何随机顺序都可以。
答案 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