2つの一致する文字列を持つファイルを同時に抽出します。

2つの一致する文字列を持つファイルを同時に抽出します。

データベースに種リストとマスターレコードがあります。メイン履歴ファイルの3番目の列で一致する種を検索して、行全体を印刷したいと思います。

種リスト

Methanocaldococcus jannaschii
Methanosarcina mazei
Methanosarcina acetivorans
Archaeoglobus fulgidus
Pyrococcus furiosus
Sulfolobus solfataricus
Aeropyrum pernix
Halobacterium sp.
Sulfolobus tokodaii
Nanoarchaeum equitans
Methanothermobacter thermautotrophicus
Pirellula sp.
Borrelia burgdorferi

species_list ファイルの最初の列が次のようになると仮定すると2番目の列は

マスターレコード

taxon_id     STRING_type     STRING_name_compact     official_name_NCBI
243232  core    Methanocaldococcus jannaschii   Methanocaldococcus jannaschii DSM2661
573063  periphery       Methanocaldococcus infernus     Methanocaldococcus infernus ME
573064  core    Methanocaldococcus fervens      Methanocaldococcus fervens AG86
579137  periphery       Methanocaldococcus vulcanius    Methanocaldococcus vulcanius M7
644281  periphery       Methanocaldococcus sp. FS40622  Methanocaldococcus sp. FS406-22
243232  core    Methanocaldococcus jannaschii   Methanocaldococcus jannaschii DSM2661
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
269797  core    Methanosarcina barkeri  Methanosarcina barkeri str. Fusaro
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
269797  core    Methanosarcina barkeri  Methanosarcina barkeri str. Fusaro
565033  core    Geoglobus acetivorans   Geoglobus acetivorans
694431  core    Desulfurella acetivorans        Desulfurella acetivorans A63
1123296 core    Stenoxybacter acetivorans       Stenoxybacter acetivorans DSM19021
224325  core    Archaeoglobus fulgidus  Archaeoglobus fulgidus DSM4304

希望の出力:

243232  core    Methanocaldococcus jannaschii   Methanocaldococcus jannaschii DSM2661
243232  core    Methanocaldococcus jannaschii   Methanocaldococcus jannaschii DSM2661
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
192952  periphery       Methanosarcina mazei    Methanosarcina mazei Go1
224325  core    Archaeoglobus fulgidus  Archaeoglobus fulgidus DSM4304

grepforループを試しています。

for i in $(cat species_list); do grep -w "$i" master_record; done

しかし、私が得ることは、属や紙が一致する系統だけではなく、両方ではありません。また、3 番目の列の検索を指定しません。

私もawk試しました。

awk 'NR=FNR{a[$0]; next}{if ($3 in a){print $0}}' species_list master_record

しかし、結果はありません。

PS:私はスクリプト初心者です。提供された助けに感謝します。ありがとうございます!

答え1

awkまたはgrep(ループなしfor)を使用できます。

grep -f species master_record

-f正規表現のリストを含むファイルの提供を許可します。


または

awk 'NR==FNR{a[$0];next}(($3 " " $4) in a)' file1 file2

これは、一致する配列要素を除いてコマンドとほぼ同じです。

答え2

ミラーの使用(https://github.com/johnkerl/miller)参加できます

mlr --nidx --fs " " --repifs join -j 1,2 -l 3,4 -r 1,2 -f master_record.csv species_list.csv

それはあなたのために

243232 core Methanocaldococcus jannaschii DSM2661
243232 core Methanocaldococcus jannaschii DSM2661
192952 periphery Methanosarcina mazei Go1
192952 periphery Methanosarcina mazei Go1
192952 periphery Methanosarcina mazei Go1
224325 core Archaeoglobus fulgidus DSM4304

希望の出力には「Methanosarcina mazei」が5回あります。なぜ?

master_recordでは3回しか表示されません。

関連情報