
Я пытаюсь объединить 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