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