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

How to sort a file using one of the columns as a group and another as a value in 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

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

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

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