Вычленение из списка старшей/предыдущей версии
Привет. Допустим есть список пакетов, который формируется исходя из схемы имя-пакета-версия.программы-версиясборки
:
kernel-modules-5.4.54-1
kernel-modules-5.4.55-1
kernel-modules-5.4.55-2
kernel-modules-5.4.58-1
kernel-modules-5.4.59-1
kernel-modules-5.4.61-1
kernel-modules-5.4.61-2
Хочу добиться двух простых целей: возможности находить среди списка разных пакетов разных версий последнюю версию для установки и предыдущую версию для даунгрейда. Думаю, каким образом это реализовать. Как вариант, разбивать на колонки на awk с разделителем -
с конца, вроде
awk -F "-" '{build=$NF; ver=$(NF-1); print ver, build}' pkg-list
Вычленив эти колонки можно определить при помощи простой сортировки последнюю и предпоследнюю версию. Но как отсеить группы пакетов по остальной части названия, чтобы сравнивать версии и билды только внутри этой группы? Знаю, что в awk есть массивы, которые можно заполнить простой конкатенацией с переносом строки awk -F- '{!a[$N]++}'
, но в моем случае я не представляю как его применить, потому что количество столбцов при использовании -
не только как разделителя, но и как элемента названия пакета, заранее неизвестно. Как можно заполнять массив, если заранее известны только те столбцы, которые точно не войдут туда для сравнения имени пакета ($NF и $(NF-1)
)? Может быть есть готовые тулзы для решения таких задач или более простые пути?