awk를 통해 다른 file2의 패턴과 일치하는 file1의 모든 줄을 추출하는 방법은 무엇입니까?

awk를 통해 다른 file2의 패턴과 일치하는 file1의 모든 줄을 추출하는 방법은 무엇입니까?

파일 1:

chr1    11868   14409   ENST00000456328.2   0   +   11868   11868   0   3   359,109,1189,   0,744,1352,
chr1    12009   13670   ENST00000450305.2   0   +   12009   12009   0   6   48,49,85,78,154,218,    0,169,603,965,1211,1443,
chr1    14403   29570   ENST00000488147.1   0   -   14403   14403   0   11  98,34,152,159,198,136,137,147,99,154,37,    0,601,1392,2203,2454,2829,3202,3511,3864,10334,15130,
chr1    17368   17436   ENST00000619216.1   0   -   17368   17368   0   1   68, 0,
chr1    29553   31097   ENST00000473358.1   0   +   29553   29553   0   3   486,104,122,    0,1010,1422,
chr1    30266   31109   ENST00000469289.1   0   +   30266   30266   0   2   401,134,    0,709,
chr1    30365   30503   ENST00000607096.1   0   +   30365   30365   0   1   138,    0,
chr1    34553   36081   ENST00000417324.1   0   -   34553   34553   0   3   621,205,361,    0,723,1167,
chr1    35244   36073   ENST00000461467.1   0   -   35244   35244   0   2   237,353,    0,476,
chr1    52472   53312   ENST00000606857.1   0   +   52472   52472   0   1   840,    0,

파일 2:

ENST00000456328
ENST00000450305

예상 출력:

chr1    11868   14409   ENST00000456328.2   0   +   11868   11868   0   3   359,109,1189,   0,744,1352,
chr1    12009   13670   ENST00000450305.2   0   +   12009   12009   0   6   48,49,85,78,154,218,    0,169,603,965,1211,1443,

나는 awk나 다른 bash 프로그램을 사용하는 것을 선호합니다.

답변1

의견에서 언급했듯이 이것은 완벽하게 작동합니다.

grep -f file2 file1

그래도 계속 사용하고 싶다면:

awk 'FNR==NR { a[$1] = $1;next} { split($4,key,"."); if ( a[key[1]]){print}}' file2 file1

간단한 for 루프를 사용하세요(첫 번째 grep과 동일):

for match in $(<file2); do grep $match file1; done

관련 정보