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

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

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

a-1
b-2
c-3

File2にも遺伝子のリストが含まれていますが、それぞれが複数回繰り返されています。これらの遺伝子の一部は、 の遺伝子と類似していますFile1

a
a
a
b
b
c
c
c

File1で共通する のすべての遺伝子を見つける必要がありますFile2。共通する遺伝子は、3 番目のファイルに印刷する必要があります (複数のコピーも)。それに加えて、遺伝子が発現するタンパク質の種類も、それと一緒に記述する必要があります ( の場合と同様File1)。

以下を入手するにはどうすればよいですかFile3?

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

答え1

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

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

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

あるいはワンライナーとして:

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

FNR従来の awk で動作する別のバージョンを示します。現在の入力ファイル内の入力レコード番号 と、これまでに確認された入力レコードの合計数を比較して、現在のファイルが最初のファイルかどうNRかを判断します。

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

関連情報