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

関連情報