awk - 일치하는 열을 기반으로 2개의 .csv 파일을 병합합니다.

awk - 일치하는 열을 기반으로 2개의 .csv 파일을 병합합니다.

많은 행이 포함된 두 개의 .csv 파일(쉼표로 구분)이 있습니다. 다음 두 파일에 대한 샘플 항목은 다음과 같습니다. n.csv:

X,I180,10.5.5.180,,833-006366,00,N-D,,,5.2,A52.604,5.2.02,,,,,,,8471 FX,,,,,

파일.csv:

X,3FE,1,I180,,,,I180:LT13,,,,,,,,,,,0,,,,,,NLS-A

내가 하고 싶은 일은:

  • 1) f.csv의 필드($2, $4, $8, $12, $25)를 가져와 새 출력 .csv 파일의 첫 번째 열에 인쇄합니다.
  • 2) n.csv의 $2가 f.csv의 $4와 일치하는 경우 n.csv 파일의 $7 필드를 가져와 새 출력 .csv 파일의 마지막 열에 인쇄합니다.

따라서 원하는 출력은 다음과 같아야 합니다.

3FE,I180,I180:LT13,,NLS-A,N-D

다음 명령을 시도했지만 마지막 열에 n.csv 파일의 $7이 인쇄되었습니다.

awk 'BEGIN { FS = OFS = "," ; } FNR==NR{ne_model[$2]=$7;x[$2]=$2;next} { if ($4!="" && $4 in x)  {print $2,$4,$8,$12,$25,ne_model[$2]} }' n.csv f.csv
3FE,I180,I180:LT13,,NLS-A,

내가 무엇을 놓치고 있는지 알아내도록 도와주실 수 있나요?

답변1

$2부터 까지 n.csv안 어울려f.csv

노력하다

awk 'BEGIN { FS = OFS = "," ; } 
  FNR==NR{ne_model[$2]=$7;x[$2]=$2;next} 
  { if ($4!="" && $4 in x)  {print $2,$4,$8,$12,$25,ne_model[x[$4]]} }' n.csv f.csv

나는 (가독성을 위해 여러 줄로 나누었습니다 ne_model[$2])ne_model[x[$4]]

이것은

3FE,I180,I180:LT13,,NLS-A,N-D

관련 정보