Skrypt do łączenia kolumn

1

Mam dwa pliki:

Dane wyjściowe yum list installedsą teraz zainstalowane yum_install, a yum list updatesteraz jako yum_updates

Potrzebuję w zasadzie połączyć jakoś te dwa pliki, ale TYLKO w oparciu o pakiety, które wymagają aktualizacji. Powiedzmy, że mój plik „yum_installed” zawiera teoretycznie 6 pakietów:

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

Moje yum_updates pozwala powiedzieć, że zawiera tylko te pakiety, ale jeśli zauważysz, tylko openssl musi zostać zaktualizowany, tak aby był to 1 pakiet.

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

To, co chcę zrobić, to po prostu mieć pakiet w tym przypadku, openssl i NEXT, aktualną, a następnie zaktualizowaną wersję. Mój plik yum_installed jest długi i zawiera pakiety, które nie wymagają aktualizacji. Nie obchodzi mnie to.

WYJŚCIE KOŃCOWE powinno wyglądać tak (linia rozdzielana spacjami jest w porządku, ale tutaj używam potoków do oddzielenia wyniku).

openssl.i686 | 0.9.8e-22.el5_8.4 | 0.9.8e-22.el5_8.4
unixpipe
źródło
Myślę, że będziesz potrzebować yum check-updatelub yum list updates.
uzsolt
Tak, yum check-updatewłaśnie tego szukasz.
glenn jackman
Wiem o tym poleceniu, ale to nie pomaga, ponieważ nie mogę dokonać porównania. Zasadniczo muszę pokazać porównanie między tym, co aktualne, a tym, co należy zaktualizować. Stary pakiet a nowy pakiet w tej samej linii.
Taki jest

Odpowiedzi:

0

To jest podejście:

$ 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

Pętla przechodzi przez installedplik i przechowuje parę (package, version)w a[]tablicy. Następnie przegląda updatedlistę i sprawdza:

  • jeśli pakiet jest przechowywany ORAZ
  • wersja nie pasuje do przechowywanej dla installedTHEN
  • drukuje package+ installed+ update.
fedorqui
źródło
0

Sprawdź polecenie „dołącz”, które prawdopodobnie robi to, co chcesz.

wurtel
źródło