bash sort буквенно-цифровой номер сборки - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть список номеров сборки, которые я получаю от моего сервера сборки, например:

1.0.0.b1
1.0.0.b10
1.0.0.b11
1.0.0.b12
1.0.0.b13
1.0.0.b14
1.0.0.b15
1.0.0.b16
1.0.0.b17
1.0.0.b18
1.0.0.b19
1.0.0.b2
1.0.0.b20
1.0.0.b21
1.0.0.b22
1.0.0.b3
1.0.0.b4
1.0.0.b5
1.0.0.b6
1.0.0.b7
1.0.0.b8
1.0.0.b9

Теперь мне нужно отсортировать это там, где я ожидаю более высокий номер сборки внизу, например:

1.0.0.b1
1.0.0.b2
1.0.0.b3
1.0.0.b4
1.0.0.b5
1.0.0.b6
1.0.0.b7
1.0.0.b8
1.0.0.b9
1.0.0.b10
1.0.0.b11
1.0.0.b12
1.0.0.b13
1.0.0.b14
1.0.0.b15
1.0.0.b16
1.0.0.b17
1.0.0.b18
1.0.0.b19
1.0.0.b20
1.0.0.b21
1.0.0.b22

теперь в linux с GNU sort это просто - просто используйте sort -V

Но это также должно работать на macOS, где у меня нет никакого опыта, но из тестирования я знаю, что -V там не работает.

Я пытался с

sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n

но не повезло.

Я хочу отсортировать его по версии / номеру сборки, например,

1.1.3.b5 выше, чем 1.0.3.b66

что я здесь пропустил? Не могли бы вы мне помочь? Кроме того, к сожалению, установка доморощенного coreutils не является опцией

спасибо, br Alex

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Я предполагаю, что ваш реальный полный список не будет иметь всех b версий. Вам нужно будет разделить поле 4 на два ключа; один для альфа-части и один для числовой части.

$: sort -t. -k1n -k2n -k3n -k4.1,4.1 -k4.2n vnums
1.0.0.a5
1.0.0.a10
1.0.0.a13
1.0.0.a19
1.0.0.b1
1.0.0.b6
1.0.0.b8
1.0.0.b9
1.0.0.b12
1.0.0.b14
1.0.0.b17
1.0.0.b20
1.0.0.b21
1.0.0.b22
1.0.0.c3
1.0.0.c7
1.0.0.c15
1.0.0.c16
1.0.0.d2
1.0.0.d4
1.0.0.d11
1.0.0.d18
1.0.3.b66
1.1.3.b5

Обратите внимание на ограничение буквенного столбца поля 4 одним символом.

0 голосов
/ 09 ноября 2018

Perl однострочный

Если предположить, что не более 6 цифр (или фиксированного размера), sprintf "%06", $& будет сортировать по числам, оставленным с добавлением 0:

perl -e 'sub v{"@_"=~s/\d+/sprintf"%06d",$&/ger}print sort{v($a)cmp v($b)} <>' inputfile
0 голосов
/ 09 ноября 2018

Считайте четвертый ключ составленным из подполей:

sort -t. -k1n,1 -k2n,2 -k3n,3 -k4.1,4.1 -k4.2n
...