awk를 사용하여 다음 결과를 어떻게 얻을 수 있나요?

awk를 사용하여 다음 결과를 어떻게 얻을 수 있나요?

두 파일에서 데이터를 추출하고 싶습니다.

파일 1.txt:

Type Number ID Element Email
Zed  21-2   9  Blade

파일 2.txt:

Name Order Email_Address
Ken  19    [email protected]
Tom  21    [email protected]
Ray  23    [email protected]

두 파일을 하나의 파일로 병합하는 방법은 다음과 같습니다.

Type Number ID Element Email
Zed  21-2   9  Blade   [email protected]

이전에 시도한 내용은 다음과 같습니다.

awk 'NR==1{print $0;next} NR==FNR{a[$2]=$1"\t"$3"\t"$4";next} {if($2 in a){print(a[$2]"\t"$3)}}' file1.txt file2.txt

if 문에 문제가 있어서 결과를 얻을 수 없는 것 같아요. 내가 원하는 결과를 어떻게 얻을 수 있나요?

답변1

$ awk 'BEGIN{print "Type Number ID Element Email"}NR==FNR{Arr[$2]=$NF;next}{split($2,b,"-");if(b[1] in Arr){print $0,Arr[b[1]]}}' file2.txt file1.txt
Type Number ID Element Email
Zed  21-2   9  Blade [email protected]

Arr[$2]=$NF-> 두 번째 열 인덱스가 있는 배열에 이메일 주소를 저장합니다. split($2,b,"-")--> 두 번째 열 값을 분할하여 조회에 사용합니다.

답변2

awk '
  NR == FNR {email[$2] = $3; next} 
  FNR == 1 {print; next}
  {
    for (order in email)
      if ($2 ~ "^" order "\\>") {
        print $0, email[order]
        break
      } 
  }
' file2.txt file1.txt | column -t
Type  Number  ID  Element  Email
Zed   21-2    9   Blade    [email protected]

^\>이 정규 표현식은 파일2의 주문 번호 "21"이 파일1의 주문 번호 "211-1"과 일치하지 않도록 단어 경계( )를 사용하여 숫자 필드( )의 시작 부분에서 주문 번호를 찾습니다.

관련 정보