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