我有以下文本文件:
$ cat myfile.txt
foo,a,10
bar,c,33
foo,b,50
bar,a,9
foo,a,20
bar,b,20
我想要做的是按第二列和第三列(数字降序)排序,最后选择每个第二列组的顶部,结果
foo,a,20
foo,b,50
bar,c,33
我被这个问题困扰了:
$ sort -t"," -k2 -k3r test.txt
foo,a,10
foo,a,20
bar,a,9
bar,b,20
foo,b,50
bar,c,33
正确的做法是什么?
最佳答案
您的sort
命令已关闭。 -k
实际上采用一系列字段,因此您的 -k2
被解释为“对从第二个字段到行尾的所有内容进行排序”,并且它会忽略完全是-k3
。您必须明确范围的开始和结束位置。您还想对第三个数字进行排序。
以下是所有内容:
$ sort -t, -k2,2 -k3,3nr myfile.txt
foo,a,20
foo,a,10
bar,a,9
foo,b,50
bar,b,20
bar,c,33
现在您想要根据第二个字段选择每个组的第一行。尽管 sort
具有对流进行重复数据删除的能力,但它还不够智能,无法处理这样的复杂场景。幸运的是,我们有 awk:
$ sort -t, -k2,2 -k3,3nr myfile.txt | awk -F, 'x != $2 { print; x = $2 }'
foo,a,20
foo,b,50
bar,c,33
关于linux - 如何使用 Unix 排序从平局决胜组中选取最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47344987/