Я пытаюсь написать awk-скрипт, который хранит записи с самым высоким значением в заданном поле, но только сравнивает записи, разделяющие два других поля.awk: сохраняйте записи с самым высоким значением, сравнивая те, которые разделяют другие поля
Я бы лучше дать пример - это input.txt:
X A 10.00
X A 1.50
X B 0.01
X B 4.00
Y C 1.00
Y C 2.43
Я хочу, чтобы сравнить все записи разделяющих одинаковые значения в 1-й и 2-го поля (XA, XB или YC) и выберите тот, который имеет наивысшее числовое значение в третьем поле.
Итак, я ожидаю, этот вывод:
X A 10.00
X B 4.00
Y C 2.43
С помощью этого сниппета я в состоянии выбрать запись с максимальным значением в 3-м поле (но это не принимая во внимание предыдущие поля, и это не выводит их либо):
awk 'BEGIN {max = 0} {if ($2>max) max=$2} END {print max}' input.txt
тока (нежелательный) выход:
10.00
Любые идеи? Я могу использовать gawk.
Большое спасибо!
Спасибо, это работает! Не могли бы вы объяснить, что делает часть «OFS $ 2» в первом блоке скобки? – XGrau
Там я сохраняю значение '$ 1 OFS $ 2' в переменной' k', где по умолчанию 'OFS' (разделитель выходных полей) является пробелом. – anubhava
Ницца, спасибо! У меня есть дополнительный, связанный с этим вопрос: что делать, если я хочу сделать то же самое, но просто используя 1-е поле в качестве ключа, но также выводя второе? Вывод должен быть: 'XA 10.00' ' YC 2.43' т.е. искать значение макс в 3-м поле между записями обмена 1-й, независимо от 2-го (или других) – XGrau