如何在 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
假设我有这个文件,使用 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