Ваша среда будет переносимой (например, ее можно брать где угодно), но не будет создавать переносимые двоичные файлы (например, запускаться в любом дистрибутиве). Библиотеки и конфигурация различаются в зависимости от дистрибутива, в некоторых случаях они просто не работают (например, несколько раз случалось с библиотеками C ++). Вы столкнетесь с проблемами даже при попытке запустить что-то из дистрибутива n + 1 на версии n.
С помощью GNU datamash(и небольшой помощи отcut
):
$ datamash -Wf groupby 2 max 3 < file.txt | cut -f1-6
TTGSCA family_1 18.123083 681 36349 1
CTTRAG family_2 17.844843 685 37001 1
WGCCAA. family_3 19.99668 747 38506 1
SCACTT family_4 19.759317 687 34686 1
Ниже приведен более чистый способ получения желаемого результата, чем мой предыдущий ответ. Это требует, чтобы sort
использовалось дважды, но это намного лучше, чем использование sort
, grep
и tail
четыре раза.
sort -k3r numbers | awk '!seen[$2]++' | sort -k2
Выход:
TTGSCA family_1 18.123083 681 36349 1
CTTRAG family_2 17.844843 685 37001 1
WGCCAA. family_3 19.99668 747 38506 1
SCACTT family_4 19.759317 687 34686 1
Я думаю, что datamash
это, вероятно, лучший инструмент, но вот своеобразная -уникальная альтернатива:
<infile sort -k2,2V -k3,3n | awk 'NR==1 || $2!=p; { p=$2 }'