Awk-compare 2 archivos usando múltiples columnas e imprima líneas de ambos archivos

Awk-compare 2 archivos usando múltiples columnas e imprima líneas de ambos archivos

Entonces tengo dos archivos planos que tienen el siguiente formato

Archivo1.txt

Customer1 12345 12346 12347 15646
Customer2 14444 14445

Archivo2.txt

12345 aol.com
12347 gmail.com
12346 google.com
14444 yahoo.com
14445 outlook.com
15646 space.com

La salida de mi deseo sería:

Customer1 aol.com gmail.com google.com space.com
Customer2 yahoo.com outlook.com

Se me ocurrió lo siguiente hasta ahora, pero parece que solo usa la columna 2 del archivo 1. ¿Existe alguna posibilidad de que pueda expandir este comando para incluir todas las columnas del archivo 1?

awk 'NR==FNR {a[$1]=$2; next} $2 in a {print $0, a[$2]}' OFS='\' file2.txt file1.txt

Respuesta1

Deberá recorrer los campos $2en adelante en File1.txt:

$ awk 'NR==FNR {a[$1]=$2; next} {for (i=2;i<=NF;i++) $i = $i in a ? a[$i] : $i} 1' File2.txt File1.txt
Customer1 aol.com google.com gmail.com space.com
Customer2 yahoo.com outlook.com

Se $i = $i in a ? a[$i] : $ipuede simplificar $i = a[$i]si está seguro de que habrá una coincidencia o si desea reemplazar las no coincidencias con campos vacíos.

información relacionada