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