Comparar dos archivos utilizando un script bash e imprimir un informe detallado de las diferencias.
Tengo 2 archivos grandes en un sistema Unix que tienen miles de filas y alrededor de 80 columnas cada uno. He ordenado los archivos según grupos de claves únicas para poder comparar siempre las mismas filas. Para facilitar la comprensión, aquí solo muestro 3 filas y 7 columnas.
Archivo 1:
d_report_ref_date="2021-03-31" system_id="VTX" contract_id="1130" credit_line_cd="ABC123" contract_id="ABC123" src_system_id="PRA" entity_cd="U0525"
d_report_ref_date="2021-03-31" system_id="VTX" contract_id="1130" credit_line_cd="ABC124" contract_id="ABC124" src_system_id="PRA" entity_cd="U0526"
d_report_ref_date="2021-03-31" system_id="VTX" contract_id="1130" credit_line_cd="ABC125" contract_id="ABC125" src_system_id="PRA" entity_cd="U0527"
Archivo 2:
d_report_ref_date="2021-03-31" system_id="VTX" contract_id="1130" credit_line_cd="ABC123" contract_id="ABC123" src_system_id="PRA" entity_cd="U0525"
d_report_ref_date="2021-03-31" system_id="VTX" contract_id="1130" credit_line_cd="ABC124" contract_id="ABC124" src_system_id="PRB" entity_cd="V0528"
d_report_ref_date="2021-03-31" system_id="VTX" contract_id="1130" credit_line_cd="ABC125" contract_id="ABC125" src_system_id="PRA" entity_cd="U0530"
Resultado esperado:
Desajuste en la fila 2: file1.src_system_id=PRA file2.src_system_id=PRB, file1.entity_cd=U0526 file2.entity_cd=V0528
Desajuste en la fila 3: file1.entity_cd=U0527 file2.entity_cd=U0530
¿Es posible lograr esto mediante scripting de Bash? Intenté AWK, pero no me está dando el resultado deseado:
paste -d' ' file1 file2 |
awk -F' ' '{w=NF/2;
for(i=1;i<=w;i++)
if($i!=$(i+w)) printf "%d %d %s %s,", NR,i,$i,$(i+w);
print ""}'
¡¡¡Gracias de antemano!!!
davy.ai
Sí, es posible lograr esto utilizando scripting en bash. Un enfoque podría ser utilizar el lenguaje de programación AWK con los siguientes pasos:
Utilizar AWK para comparar cada par de filas de los dos archivos.
Verificar los valores clave que son comunes a ambas filas y las diferencias en las columnas restantes.
Imprimir el número de fila, número de columna y el valor clave con la diferencia.
Aquí hay un ejemplo de programa en AWK que logra la salida esperada:
Este script extrae los valores clave de cada fila para identificar cuáles son comunes a ambos archivos. Luego, compara las columnas restantes entre las dos filas, imprimiendo las diferencias en caso de una discrepancia. Finalmente, guarda la fila actual en una tabla hash para su posterior comparación.
Nota: La salida de este script puede variar dependiendo de cómo se definan los valores clave o las columnas específicas que se están comparando, pero esto debería ser un buen punto de partida para sus necesidades.