Sort and keep a unique duplicate which has the highest value

后端 未结 2 434
不知归路
不知归路 2020-12-06 03:42

I have a file like the one shown below, I want to keep the combinations between the first and second field which has the highest value on the third field(the ones with the a

相关标签:
2条回答
  • 2020-12-06 03:47

    Two passes of sort should do it, for example in bash shell

    sort -k1,1n -k2,2n -k3,3nr -t$'\t'  file  | sort -k1,1n -k2,2n -t$'\t' -u -s
    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
    
    0 讨论(0)
  • 2020-12-06 04:10

    This is a bit funny, but:

    sort -nr myfile.txt | rev | uniq -f1 | rev | sort -n
    

    Output:

    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 
    

    How it works:

    • Sort reverse numerically, putting the highest values at the top (so they are saved)
    • Reverse each line, so the last field is first (needed for uniq)
    • Save only the first uniq line, but ignoring the first field (was the last field)
    • Reverse the line back to original order
    • Sort the lines from low to high again

    Probably not the most efficient in the world, but at least each step makes some sense.

    0 讨论(0)
提交回复
热议问题