두 번째 CSV 파일의 항목을 기반으로 CSV 파일의 한 필드 바꾸기

두 번째 CSV 파일의 항목을 기반으로 CSV 파일의 한 필드 바꾸기

2개의 파일을 합쳐보려고 합니다 awk. file1의 필드 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"이 두 번 나타나면 출력에는 해당 항목 중 하나만 포함됩니다. 위의 예에서는 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

관련 정보