.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