Script para juntar colunas

1

Eu tenho dois arquivos:

A saída de yum list installed que agora é yum_installed e yum list updates agora como yum_updates

O que eu preciso é basicamente juntar os dois arquivos de alguma forma, mas SOMENTE baseado nos pacotes que precisam ser atualizados. Vamos dizer que o meu arquivo 'yum_installed' contém teoricamente 6 pacotes:

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

Meu yum_updates permite dizer que contém apenas esses pacotes, mas se você notar, apenas o openssl precisa ser atualizado para que seja um pacote.

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

O que eu quero fazer é basicamente ter o pacote neste caso, o openssl e NEXT, as versões atual e, em seguida, as atualizadas. Meu arquivo yum_installed é longo e tem pacotes que não precisam ser atualizados. Eu não me importo com isso.

O FINAL OUTPUT deve ficar assim (uma linha delimitada por espaço é boa, mas aqui estou usando pipes para separar a saída).

openssl.i686 | 0.9.8e-22.el5_8.4 | 0.9.8e-22.el5_8.4
    
por unixpipe 09.09.2014 / 18:03

2 respostas

0

Esta é uma abordagem:

$ 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

Ele percorre o arquivo installed e armazena o par (package, version) na matriz a[] . Em seguida, ele percorre a lista updated e verifica:

  • se o pacote estiver armazenado E
  • a versão não corresponde à armazenada para installed THEN
  • imprime package + installed + update .
por 10.09.2014 / 13:52
0

Confira o comando "join", que provavelmente faz o que você quer.

    
por 10.09.2014 / 11:06