Bash output the line with highest value

23,423

Solution 1

With sort:

$ sort -rk3 file             # Sort on column 3, display all results

2.gui  Qxy  23
1.gui  Qxx  16
3.guT  QWS  11

$ sort -rk3 file | head -2   # Sort on column 3, filter number of results

2.gui  Qxy  23
1.gui  Qxx  16

$ sort -rk3 file | uniq      # Sort on column 3, on display unique results 

2.gui  Qxy  23
1.gui  Qxx  16
3.guT  QWS  11

-r reverse sort, highest first.

-k3 sort on the 3rd column.


If you only want to display line which the 3rd column is greater than some value (i.e. 15) then try this using awk:

awk '$3>15' file | sort -rk3  # Display line where column 3 > 15 and sort

2.gui  Qxy  23
1.gui  Qxx  16

Solution 2

for future users with same question:

do not forget to introduce -n switch to the -sort command, or your values are ordered starting from 9999's and followed by 999's etc.. so use

sort -rnk3 file

and if you want to get only one line with highest value (remove duplicates) use this:

sort -rnk3 file | awk '!x[$2]++'

and if you have an usual delimiter you can tell -awk to notice:

sort -rnk3 file | awk -F"[. ]" '!x[$2]++'
Share:
23,423
teutara
Author by

teutara

Updated on March 26, 2020

Comments

  • teutara
    teutara about 4 years

    my question is pretty much like this one but with one difference; i want the output the line that has highest score on the 3rd tab. my data is like:

    1.gui  Qxx  16
    2.gui  Qxy  23
    3.guT  QWS  11
    

    and i want to get this:

    1.gui  Qxy  23
    3.guT  QWS  11
    

    I used:

    cat file.f | uniq | cut -d" " -f3 | sort | uniq -d >>out.f
    

    but did not get what i want!?