1

У меня есть два файла:

Вывод yum list installed который теперь является yum_installed, а yum list updates как yum_updates

Мне нужно как-то объединить два файла, но ТОЛЬКО на основе пакетов, которые нужно обновить. Допустим, мой файл 'yum_installed' теоретически содержит 6 пакетов:

openssh-clients.i386                  4.3p2-82.el5                     installed
openssh-server.i386                   4.3p2-82.el5                     installed
openssl.i686                          0.9.8e-22.el5_8.4                installed
oprofile.i386                         0.9.4-20.el5                     installed
orca.i386                             1.0.0-5.el5                      installed
pam.i386                              0.99.6.2-12.el5                  installed

Допустим, мои yum_updates содержат только эти пакеты, но если вы заметили, нужно обновить только openssl, так что это 1 пакет.

ntp.i386                             4.2.2p1-17.el5.centos               updates
openldap.i386                        2.3.43-28.el5_10                    updates
openssl.i686                         0.9.8e-27.el5_10.4                  updates
pcre.i386                            6.6-9.el5                           base   
perl.i386                            4:5.8.8-41.el5                      base   
pidgin.i386                          2.6.6-32.el5                        updates

Что я хочу сделать, так это просто пакет в этом случае, openssl и NEXT, текущая и затем обновленные версии. Мой файл yum_installed длинный и содержит пакеты, которые не нужно обновлять. Меня это не волнует.

ЗАКЛЮЧИТЕЛЬНЫЙ ВЫХОД должен выглядеть следующим образом (строка с пробелом в порядке, но здесь я использую каналы для разделения вывода.)

openssl.i686 | 0.9.8e-22.el5_8.4 | 0.9.8e-22.el5_8.4

2 ответа2

0

Проверьте команду "join", которая, вероятно, делает то, что вы хотите.

0

Это подход:

$ awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1]!=$2 {print $1, a[$1], $2}' OFS="\t" inst upd
openssl.i686    0.9.8e-22.el5_8.4   0.9.8e-27.el5_10.4

Он перебирает installed файл и сохраняет пару (package, version) в массиве a[] . Затем он просматривает updated список и проверяет:

  • если пакет хранится И
  • версия не соответствует сохраненной для installed ТО
  • распечатывает package + installed + update .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .