他のファイルの列に基づいて一意の行を選択する方法は?

他のファイルの列に基づいて一意の行を選択する方法は?

2つの遺伝子データセットがあります。ファイル1はtxtファイルで、対応する染色体IDはすべてファイル2にも表示されます。ファイル2は、ファイル1よりも大きく、一意の染色体IDを持つcsvファイルです。ファイル1と比較して一意の染色体IDを持つファイル2の行のみを抽出するにはどうすればよいですか?

たとえば、私のデータは次のようになります。

ファイル1(染色体位置は実際に私の125番目の列です...):

Gene  pval    ... Chromosome position ID
ACE   0.002   ... 01:3290834_CT_C_1
NOS   0.01    ... 03:3304593_GA_G_1
BRCA  0.004 . ... 06:6265733_GA_G_1
CYP3  0.34    ... 09:9433933_GA_G_1

ファイル2(染色体位置が最初の列):

Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002
03:3304593_GA_G_1       NOS   0.01
06:6265733_GA_G_1       BRCA  0.004
09:9433933_GA_G_1       CYP3  0.34

染色体位置IDのみに基づいてファイル2にのみ表示される出力の唯一の行は次のとおりです。

Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002

uniq私はこの出力を使用して取得しようとしましたが、sortこれまでは複数のテキストファイルを使用するオンライン例だけを見つけましたが、代わりに一意のID行ではなく一致するID行を使用したいと思います。この方法も試しましたが、grepファイルサイズが大きく、コマンドは終了しました。

答え1

他のスレッドの解決策(シェル拡張ファイル[12]を除く):

awk ' FNR==NR {P[$125]; next} FNR==1 || !($1 in P)' file1 file2
Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002

関連情報