파일 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
또한보십시오: