Сортировка чисел с несколькими десятичными знаками в bash
В bash
с помощью sort
с -n
вариант не дает мне ожидаемого результата.
$ cat numbers | sort -n
1.0
1.1
1.11.4
1.15
1.3
1.3.3
1.4-p1
1.6.1
2.2.10
2.2.2
2.4
2.4.6
Я пытался с помощью -k1
, -k1.1n
, так далее. (-k1.3n
получает правильный порядок только для номеров, начинающихся с 1
). Кажется, что-то очень простое, я здесь скучаю...
4 ответа
Вам нужен -t. флаг для указания '.' как ваш разделитель, так и спецификаторы положения нескольких клавиш обрабатывают постепенно увеличивающиеся / увеличивающиеся числа. Я до сих пор не совсем понимаю, как это работает, но это работает...
sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n numbers
или же
cat numbers | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n
Для этого есть специальный флаг -V
для номеров версий
$ sort -V numbers
1.0
1.1
1.3
1.3.3
1.4-p1
1.6.1
1.11.4
1.15
2.2.2
2.2.10
2.4
2.4.6
пс. эта опция доступна в GNU Coreutils и может отсутствовать в других реализациях.
sort -g numbers
Это будет сделать. Согласно сортировке man-страницы, -g
предназначен для числовой сортировки:
-g, --general-numeric-sort
сравнить по общему числовому значению