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]++'
Author by
teutara
Updated on March 26, 2020Comments
-
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!?