Explicación

Explicación

Tengo 2 archivos.

El archivo 1 contiene: -

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

y el archivo 2 contiene: -

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

Quiero el resultado deseado en un archivo 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

Respuesta1

Supongo que desea generar solo campos cuya clave aparezca en ambos archivos, con ambos valores. Como se menciona enLa respuesta de Sparhawk, la herramienta adecuada para esto es join. Con AWK, lo siguiente funciona:

#!/usr/bin/awk -f

BEGIN {
    OFS = FS = "="
}

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

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

Esto comienza estableciendo los separadores de campo de entrada y salida en "=", luego analiza el primer archivo ( FNR == NR), almacenando todos sus valores en la valuesmatriz asociativa, luego analiza cualquier archivo siguiente ( FNR < NR), y para cada línea, si un valor era visto en el primer archivo, genera la clave, el valor almacenado y el valor en el archivo actual.

Respuesta2

Para esta tarea, una herramienta más sencilla que awkes join:

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

Explicación

Consulte man joinpara obtener más información, pero:

  • -t '=': utilizar =como delimitador
  • -1 1 -2 1: unirse en el campo 1 del archivo 1 y en el campo 1 del archivo 2
  • file1.txt file2.txt: une estos dos archivos.

información relacionada