假设我有这个文件,使用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
然后,我可以将它与原始文件合并,但我们假设我们事先并不知道正确的顺序。
答案 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