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

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

を使用して 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 つだけが含まれます。上記の例では、ファイル 1 から行「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

関連情報