
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 awk
comando 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.csv
primeiro, 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