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