Сортировка чисел с несколькими десятичными знаками в 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

сравнить по общему числовому значению

Пытаться;

sort -g -k1 file

Это точно сработает !!!

Другие вопросы по тегам