Я бы просто отсортировал по 2-му и 3-му полям напрямую и прошел через awk
, чтобы сохранить максимальное значение:
$ sort -k 3,3nr -k 5,5rn input | awk '!a[$3]++'
SMURF1 7 99143726 GACAGATTGG 74
CSNK1D 17 82251379 AATTTAGCCA 68
UBE2Z 17 48910880 CTAAGGATCC 48
AC003665.1 17 47813266 AGCAGGCGCA 83
RIOK3 18 23453502 GCAAGACTTT 69
Это имеет то преимущество, что сортирует файл только один раз, а также не требует хранения всего файла в памяти. Тем не менее, я ожидаю, что awk-подход Icarus будет быстрее, поскольку ему нужно прочитать файл только один раз.