2つのファイル間のパターンを見つける

2つのファイル間のパターンを見つける

File1遺伝子リスト(文字で表示)が含まれています。各遺伝子は、それが表すタンパク質によって説明されます(文字で示されています)。

a-1
b-2
c-3

File2遺伝子のリストも含まれるが、各遺伝子は数回繰り返される。これらの遺伝子のいくつかは次のようになりますFile1

a
a
a
b
b
c
c
c

File1中国で共有された遺伝子をすべて見つけなければならないFile2。 Commonは3番目のファイルとして印刷する必要があります(複数コピーの場合も同様)。これに加えて、遺伝子が発現するタンパク質の種類も一緒に書く必要があります(と同様File1)。

次はどのように入手できますかFile3

a-1
a-1
a-1
b-2
b-2
c-3
c-3
c-3

ベストアンサー1

ARGIND処理中の現在のファイルのインデックスである組み込み変数を持つgawkを使用してこれを行う簡単な方法は次のとおりです。ARGV

最初のファイルの各入力行を分割し、最初のフィールドインデックスを行全体を-格納する配列として使用します。table2番目のファイル(およびそれ以降のファイル)の場合は、行全体をインデックスとして使用して目的のtable行を検索します。

BEGIN{FS = "-"}
ARGIND==1{table[$1] = $0}
ARGIND>1{print table[$0]}

または1行で:

awk 'BEGIN{FS = "-"}; ARGIND==1{table[$1] = $0}; ARGIND>1{print table[$0]}' file_1 file_2

以下は、伝統的なawkの別のバージョンです。FNR現在の入力ファイルの入力レコード数とNRこれまでに見た入力レコードの総数を比較して、現在のファイルが最初のファイルであるかどうかを判断します。

awk -F'-' 'NR==FNR{table[$1] = $0}; NR>FNR{print table[$0]}' file_1 file_2

おすすめ記事