Небольшая заметка о возможностях команды
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
.