Linux 시스템에 다음 데이터가 포함된 두 개의 CSV 파일이 있습니다.
파일 A
Sunil,21,write a line,2312,12-03-2022
Ashok,22,write a para,2312,12-03-2022
Sam,23,create file using,2312,12-03-2022
문서 B
21,write a line,Writer
21,write a script,Writer
23,create file using,Coder
25,create class,Coder
22,write a para,Poet
22,write a file,Writer
이제 FileA의 두 번째 및 세 번째 열(예: 21, 행 쓰기)을 FileB와 비교해야 하며, 일치하면 FileB의 세 번째 열이 인쇄되어야 합니다.
산출:
Writer
Poet
Coder
답변1
원하는 것을 얻고 데이터가 제공된 것이라고 가정하면 다음과 같이 달성할 수 있습니다.
awk -F, 'NR==FNR{array[$2,$3]; next} ($1,$2) in array { print $NF}' filea fileb
기본적으로 여기서 수행하는 작업은 array
현재 레코드 처리를 중지할 때 열 2와 열 3을 저장하는 것입니다(사용함 next
). then is $1
및 $2
of fileb in array
if 그렇다면 레코드의 마지막 열을 참조하는 $NF
곳을 인쇄합니다.$NF
NR
FNR
awk에 내장된 변수입니다 . NR은 지금까지의 총 레코드 수를 나타내고, FNR은 현재 파일의 레코드 수를 나타냅니다.