如何使用其中一个列作为组对另一个列进行排序,另一个作为unix中的值进行排序?

时间:2015-01-26 23:06:32

标签: sorting unix

假设我有这个文件,使用sort -t $'\t' -k1,1 -k3,3gr订购:

echo "A 6
A   5
A   4
B   7
B   2
C   10
C   9
C   8
" > my_file

有没有办法像这样订购?:

C   10
C   9
C   8
B   7
B   2
A   6
A   5
A   4

基本上,我希望具有最大值的组首先显示(C),然后显示具有下一个最大值(B)的组,等等。

我知道一种方法是创建一个辅助文件,如:

1,C
2,B
3,A

然后,我可以将它与原始文件合并,但我们假设我们事先并不知道正确的顺序。

1 个答案:

答案 0 :(得分:1)

好的,问这个问题只是帮我想出答案。我使用awk添加一个额外的列,每个组具有最大值,并使用它进行排序。有更简单的解决方案吗?

awk -F"\t" -v OFS="\t" '
FNR == NR{
    if ($2 > largest_by_group[$1]) {
        largest_by_group[$1] = $2
    }
    next
}
{
    print $1, $2, largest_by_group[$1]
}' my_file my_file | \
sort -t $'\t' -k3,3rg -k2,2rg |\
cut -f1,2