입력 목록을 기반으로 특정 열에서 정보를 추출하는 루프

입력 목록을 기반으로 특정 열에서 정보를 추출하는 루프

파일 A와 파일 B가 있습니다.

fileA는 fileB의 두 번째 열에서 추출하려는 이름 목록을 저장하고 있습니다.

파일 A:

QW123
BH876
PR009

파일 B:

MJ194   PR009   100
PR009   IJ940   78
JG948   BH448   58

예상 출력:

MJ194   PR009   100
JG948   BH448   58

아래 명령을 사용하여 시도하고 있지만 아무 것도 작동하지 않습니다. 코드 사이에 무엇이 빠졌는지 궁금합니다.

  • for i in $(cat fileA); do awk '$2=="$i"' fileB; done
  • for i in $(cat fileA); do awk -v 'i="$i"' '$2=="i"' fileB; done

어떤 도움이라도 대단히 감사하겠습니다.

답변1

불필요한 참조를 제거하면 두 번째 시도는 "작동"합니다.

for i in $(cat fileA); do awk -v i="$i" '$2==i' fileB; done    # but don't do this

그러나 쉘 루프를 사용하기로 결정한 경우 다음을 사용하는 것이 좋습니다 while.

while IFS= read -r i; do awk -v i="$i" '$2==i' fileB; done < fileA    # don't do this either

더 나은 접근 방식은 쉘 루프를 완전히 피하는 것입니다.

awk 'NR==FNR{a[$1]; next} $2 in a' fileA fileB

또한보십시오:

관련 정보