두 파일에서 데이터를 추출하고 싶습니다.
파일 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"과 일치하지 않도록 단어 경계( )를 사용하여 숫자 필드( )의 시작 부분에서 주문 번호를 찾습니다.