Как выбрать из каждого имени файла версию с наибольшим номером?

Используйте read -s, чтобы не повторять ввод, т. е. ничего не показывать, когда пользователь вводит пароль:

read -p 'Password? ' -s password
echo Your password is "$password".
0
19.05.2020, 08:38
3 ответа

Ниже может помочь сортировка по основным и дополнительным версиям пакета. Просто подумал, что это может помочь.

$ cat test | sed -e 's/-\([[:alpha:]]\)/+\1/g' |   sort -t - -n -k2 -r | sed -e 's/+\([[:alpha:]]\)/-\1/g'
ganglia-web-3.8.1-2.el7.x86_64.rpm
ganglia-gmond-python-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-3.8.2-2.el7.x86_64.rpm
ganglia-gmetad-3.8.2-2.el7.x86_64.rpm
ganglia-devel-3.8.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.8.2-2.el7.x86_64.rpm
ganglia-3.8.2-2.el7.x86_64.rpm
ganglia-web-3.7.1-2.el7.x86_64.rpm
ganglia-gmond-python-3.7.2-2.el7.x86_64.rpm
ganglia-gmond-3.7.2-2.el7.x86_64.rpm
ganglia-gmetad-3.7.2-2.el7.x86_64.rpm
ganglia-devel-3.7.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.7.2-2.el7.x86_64.rpm
ganglia-3.7.2-2.el7.x86_64.rpm
0
28.04.2021, 23:13
$ sed -E 's/([a-z])-([[:digit:]]+\.)+/\1 \2/' file |
  sort -k2Vr |
  awk '$1 in a{ next } { a[$1]; print $1 "-" $2 }'
ganglia-8.2-2.el7.x86_64.rpm
ganglia-debuginfo-8.2-2.el7.x86_64.rpm
ganglia-devel-8.2-2.el7.x86_64.rpm
ganglia-gmetad-8.2-2.el7.x86_64.rpm
ganglia-gmond-8.2-2.el7.x86_64.rpm
ganglia-gmond-python-8.2-2.el7.x86_64.rpm
ganglia-web-8.1-2.el7.x86_64.rpm
  • sed:заменить первый -между суффиксом имени и версии пробелом
  • sort:во втором поле по версии в обратном порядке
  • awk:пропустить строку, если имя существует в массиве, в противном случае сохранить имя в массиве и вывести имя, -и суффикс версии
0
28.04.2021, 23:13

Сzsh:

typeset -A max_version
for file (*.rpm(nN)) max_version[${file%-*-*.*.*.*}]=$file
print -rC1 -- $max_version

Где *.rpm(nN)— список .rpmфайлов в текущем каталоге, отсортированный по номерам. И запишем наибольшую версию пакетаxx-version-packageVersion.rel.arch.rpm)в ассоциативный массив max_version.

Этот ассоциативный массив в конечном итоге содержит что-то вроде:

$ typeset -p max_version typeset -A max_version=( [ganglia]=ganglia-3.8.2-2.el7.x86_64.rpm [ganglia-debuginfo]=ganglia-debuginfo-3.8.2-2.el7.x86_64.rpm [ganglia-devel]=ganglia-devel-3.8.2-2.el7.x86_64.rpm [ganglia-gmetad]=ganglia-gmetad-3.8.2-2.el7.x86_64.rpm [ganglia-gmond]=ganglia-gmond-3.8.2-2.el7.x86_64.rpm [ganglia-gmond-python]=ganglia-gmond-python-3.8.2-2.el7.x86_64.rpm [ganglia-web]=ganglia-web-3.8.1-2.el7.x86_64.rpm )

0
28.04.2021, 23:13

Теги

Похожие вопросы