Bash вывести строку с наибольшим значением

Мой вопрос очень похож на этот, но с одним отличием; я хочу вывод строки, которая имеет самый высокий балл на 3-й вкладке. мои данные как:

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

и я хочу получить это:

1.gui  Qxy  23
3.guT  QWS  11

Я использовал:

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

но не получил то, что хочу!?

3 ответа

Решение

С 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 обратная сортировка, сначала самая высокая.

-k3 сортировать по 3-му столбцу.


Если вы хотите отобразить только строку, у которой 3-й столбец больше некоторого значения (т.е. 15), попробуйте это, используя awk:

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

2.gui  Qxy  23
1.gui  Qxx  16

Для будущих пользователей с таким же вопросом:

не забудьте ввести ключ -n в -sort команда, или ваши значения упорядочены, начиная с 9999, а затем 999 и т. д., поэтому используйте

sort -rnk3 file

и если вы хотите получить только одну строку с наибольшим значением (удалить дубликаты), используйте это:

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

и если у вас есть обычный разделитель, вы можете сказать, -awk замечать:

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

Это должно дать вам наибольшее значение для тех строк, где повторяется имя, и сохранить те строки, которые не имеют повторяющихся имен.

sort -rk3 file | awk '!seen[$1]++' > file_filtered.txt
Другие вопросы по тегам