Substitua um campo do arquivo CSV com base nas entradas de um segundo arquivo CSV

Substitua um campo do arquivo CSV com base nas entradas de um segundo arquivo CSV

Estou tentando mesclar 2 arquivos usando awk. Quero imprimir os campos 1,2 do arquivo1 como estão e substituir o campo 3 de acordo com um mapeamento armazenado no arquivo 2.

Arquivo1:

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

Arquivo2:

bl,blue
yel,yellow

Saída desejada:

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

O que eu tentei até agora

Aqui está o awkcomando que tentei até agora:

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

No entanto, quando "bl" aparece duas vezes no arquivo 1, a saída inclui apenas uma das ocorrências. No exemplo acima está faltando a linha "2" do arquivo1.

3,jeans,blue
1,top,yellow

Responder1

Com base na saída desejada, parece que o que você realmente deseja fazer é ler file2.csvprimeiro, criar um mapeamento entre os campos e depois aplicá-lo afile1.csv

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

informação relacionada