Небольшая заметка о возможностях команды sort.
Имеется небольшой скрипт, который выводит список последних доступных версий программы:
$ ./version.sh 4.4.0.29 4.4.0.30 4.4.0.31 4.4.0.4 4.4.0.8
Проблема в том, что sort никак не мог выполнить «правильную» сортировку чисел, считая .4 и .8 больше, чем .31, даже при использовании ключей -n и -g:
$ ./version.sh | sort -n 4.4.0.29 4.4.0.30 4.4.0.31 4.4.0.4 4.4.0.8
$ ./version.sh | sort -g 4.4.0.29 4.4.0.30 4.4.0.31 4.4.0.4 4.4.0.8
Решение — использовать ключи -t и -k:
$ ./version.sh | sort -n -t . -k 4.1 4.4.0.4 4.4.0.8 4.4.0.29 4.4.0.30 4.4.0.31
Тут:
-t, --field-separator — разделитель полей, по которому вести отсчёт;
-k, --key — ключи, по которым выполнять сортировку.
В данном случае — разделителем установлена точка, а сортировка выполняется по первому полю четвёртого ключа, т.е. при сортировке «отсекаются» первые три поля — 4.4.0.