Reemplazar un campo del archivo CSV según las entradas de un segundo archivo CSV

Reemplazar un campo del archivo CSV según las entradas de un segundo archivo CSV

Estoy intentando fusionar 2 archivos usando awk. Quiero imprimir los campos 1,2 del archivo 1 tal como están y reemplazar el campo 3 de acuerdo con un mapeo almacenado en el archivo 2.

Archivo1:

1,top,yel
2,dress,bl
3,jeans,bl

Archivo2:

bl,blue
yel,yellow

Salida deseada:

1,top,yellow
2,dress,blue
3,jeans,blue

Lo que intenté hasta ahora

Aquí está el awkcomando que probé hasta ahora:

gawk 'BEGIN {FS=OFS=","} NR==FNR {seen[$3]=$1 "," $2;next} ($1) in seen {print seen[$1],$2}' file1.csv file2.csv

Sin embargo, cuando "bl" aparece dos veces en el archivo 1, el resultado solo incluye una de las apariciones. En el ejemplo anterior falta la línea "2" del archivo1.

3,jeans,blue
1,top,yellow

Respuesta1

Según el resultado deseado, parece que lo que realmente desea hacer es leer file2.csvprimero, crear un mapeo entre los campos y luego aplicarlo afile1.csv

awk 'BEGIN{OFS=FS=","} NR==FNR{clr[$1]=$2; next} {$3=clr[$3]; print}' file2.csv file1.csv

información relacionada