Compare dois arquivos com o uso do awk

0

Eu tenho 2 arquivos.

O arquivo 1 contém: -

emcas_biaas_dev=-628
emcas_brs_ba=-32
emcas_cc_analytics=246
emcas_edservices_bi=312
emcas_edservices_dev=-159
emcas_engr_usd=1519
emcas_engr_xio=-67
emcas_fin_bi=9

e o Arquivo 2 contém: -

emcas_bdl_migrate=2
emcas_biaas_dev=63
emcas_brs_ba=430
emcas_cc_analytics=2231
emcas_clm_reporting=16
emcas_collab_xsat=6241
emcas_cpsd_cee=11
emcas_cpsd_hcp=0
emcas_e2ep_ba=187
emcas_edservices_bi=955
emcas_edservices_dev=374
emcas_elms_analytics=0
emcas_engr_clm=3
emcas_engr_scaleio=0
emcas_engr_usd=2669
emcas_engr_xio=340
emcas_fin_bi=333
emcas_fin_drr=5528

Eu quero a saída desejada em um arquivo separado como: -

emcas_biaas_dev=-628=63
emcas_brs_ba=-32=430
emcas_cc_analytics=246=2231
emcas_edservices_bi=312=955
emcas_edservices_dev=-159=374
emcas_engr_usd=1519=2669
emcas_engr_xio=-67=340
emcas_fin_bi=9=333
    
por Subhashis Dey 27.08.2018 / 11:53

2 respostas

1

Para essa tarefa, uma ferramenta mais simples que awk é join :

join -t '=' -1 1 -2 1 file1.txt file2.txt

Explicação

Veja man join para mais informações, mas:

  • -t '=' : use = como delimitador
  • -1 1 -2 1 : junte-se ao campo 1 do arquivo 1 e ao campo 1 do arquivo 2
  • file1.txt file2.txt : junte esses dois arquivos.
por 27.08.2018 / 12:07
2

Suponho que você queira gerar apenas os campos cuja chave aparece nos dois arquivos, com ambos os valores. Conforme mencionado na resposta do Sparhawk , a ferramenta certa para isso é join . Com o AWK, os seguintes trabalhos:

#!/usr/bin/awk -f

BEGIN {
    OFS = FS = "="
}

FNR == NR {
    values[$1] = $2
}

FNR < NR {
    if (values[$1]) {
        print $1, values[$1], $2
    }
}

Isso começa configurando os separadores de campos de entrada e saída como “=”, depois analisa o primeiro arquivo ( FNR == NR ), armazenando todos os seus valores na matriz values associativa, depois analisa qualquer arquivo seguinte ( FNR < NR ), e para cada linha, se um valor foi visto no primeiro arquivo, gera a chave, o valor armazenado e o valor no arquivo atual.

    
por 27.08.2018 / 12:06