排序并保留具有最高值的唯一副本

Tam*_*ero 5 unix sorting uniq

我有一个如下所示的文件,我想保留在第三个字段上具有最高值的第一个和第二个字段之间的组合(带有箭头的那些,实际文件中不包含箭头)。

1   1   10
1   1   12        <- 
1   2   6         <-
1   3   4         <- 
2   4   32
2   4   37
2   4   39
2   4   40        <- 
2   45  12
2   45  15        <- 
3   3   12
3   3   15
3   3   17
3   3   19        <- 
3   15  4
3   15  9         <- 
4   17  25
4   17  28
4   17  32
4   17  36        <- 
4   18  4         <- 
Run Code Online (Sandbox Code Playgroud)

为了有这样的输出:

1   1   12
1   2   6
1   3   4
2   4   40
2   45  15
3   3   19
3   15  9
4   17  36
4   18  4
Run Code Online (Sandbox Code Playgroud)

我想也许我只是在玩sortuniq命令,但我弄得一团糟。

有任何想法吗?

非常重要的注意事项:条目从一开始就没有整齐地排序,我只是使用 sort -k1,1 -k2,2 -k3,3

提前谢谢各位

ber*_*roe 4

这有点有趣,但是:

sort -nr myfile.txt | rev | uniq -f1 | rev | sort -n
Run Code Online (Sandbox Code Playgroud)

输出:

1   1   12
1   2   6 
1   3   4 
2   4   40
2   45  15
3   15  9 
3   3   19
4   17  36
4   18  4 
Run Code Online (Sandbox Code Playgroud)

怎么运行的:

  • 按数字反向排序,将最高的值放在顶部(以便保存它们)
  • 反转每一行,因此最后一个字段位于第一个(需要uniq
  • 仅保存第一个 uniq 行,但忽略第一个字段(是最后一个字段)
  • 将线反转回原来的顺序
  • 再次将行从低到高排序

可能不是世界上最有效的,但至少每一步都是有意义的。