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 $2
en 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] : $i
puede simplificar $i = a[$i]
si está seguro de que habrá una coincidencia o si desea reemplazar las no coincidencias con campos vacíos.