データベースに種リストとマスターレコードがあります。メイン履歴ファイルの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
grep
forループを試しています。
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回しか表示されません。