Я передаю вывод программы через некоторые команды awk, и я почти там, где мне нужно. Команда на данный момент:
myprogram | awk '/chk/ { if ( $12 > $13) printf("%s %d\n", $1, $12 - $13); else printf("%s %d\n", $1, $13 - $12) } ' | awk '!x[$0]++'
Последний бит - uniq
для бедняка, которого нет у моей цели. При условии, что приведенная выше команда выдаст такой результат:
GR_CB20-chk_2, 0
GR_CB20-chk_2, 3
GR_CB200-chk_2, 0
GR_CB200-chk_2, 1
GR_HB20-chk_2, 0
GR_HB20-chk_2, 6
GR_HB20-chk_2, 0
GR_HB200-chk_2, 0
GR_MID20-chk_2, 0
GR_MID20-chk_2, 3
GR_MID200-chk_2, 0
GR_MID200-chk_2, 2
Что бы я хотел иметь, это:
GR_CB20-chk_2, 3
GR_CB200-chk_2, 1
GR_HB20-chk_2, 6
GR_HB200-chk_2, 0
GR_MID20-chk_2, 3
GR_MID200-chk_2, 2
То есть я хотел бы напечатать только строку, которая имеет максимальное значение для данного тега (первое «поле»). Приведенный выше пример представляет данные at в том смысле, что выходные данные будут отсортированы (как если бы они были переданы через команду sort
).