Заменить одно поле CSV-файла на основе записей во втором CSV-файле

Заменить одно поле CSV-файла на основе записей во втором CSV-файле

Я пытаюсь объединить 2 файла с помощью awk. Я хочу вывести поля 1, 2 из файла 1 такими, какие они есть, и заменить поле 3 в соответствии с сопоставлением, хранящимся в файле 2.

Файл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

Однако, когда "bl" появляется дважды в файле 1, вывод включает только одно из вхождений. В приведенном выше примере отсутствует строка "2" из файла 1.

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

Связанный контент