Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 在unix中,如何使用一列作为组,另一列作为值对文件进行排序?_Sorting_Unix - Fatal编程技术网

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

Sorting 在unix中,如何使用一列作为组,另一列作为值对文件进行排序?,sorting,unix,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 然后,我可以将其与原

假设我有这个文件,使用
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 ($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

不,先按字母排序:
A:4a:5a:6b:2b:7c:10c:8c:9
。谢谢