2番目のCSVファイルのエントリに基づいてCSVファイルのフィールドを置き換えます。

2番目のCSVファイルのエントリに基づいてCSVファイルのフィールドを置き換えます。

.mergeを使用して2つのファイルをマージしようとしていますawk。ファイル1のフィールド1、2をそのまま印刷し、ファイル2に格納されているマッピングに基づいてフィールド3を置き換えたいと思います。

ファイル1:

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

ファイル2:

bl,blue
yel,yellow

希望の出力:

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

今まで試したこと

awkこれまでに試したコマンドは次のとおりです。

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

ただし、ファイル 1 で「bl」が 2 回発生すると、出力には発生項目の 1 つだけが含まれます。上記の例では、file1に「2」行がありません。

3,jeans,blue
1,top,yellow

答え1

file2.csv目的の出力に基づいて実際に実行したいことは、最初に読み込み、フィールド間でマッピングを作成してから適用するようです。file1.csv

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

関連情報