두 번째 CSV 파일의 항목을 기반으로 CSV 파일의 필드를 바꿉니다.

두 번째 CSV 파일의 항목을 기반으로 CSV 파일의 필드를 바꿉니다.

.merge 를 사용하여 두 파일을 병합하려고 합니다 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"이 두 번 발생하면 출력에는 발생 항목 중 하나만 포함됩니다. 위의 예에서는 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

관련 정보