
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 values
matriz 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 awk
es join
:
join -t '=' -1 1 -2 1 file1.txt file2.txt
Explicación
Consulte man join
para 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 2file1.txt file2.txt
: une estos dos archivos.