
を使用して 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