데이터베이스에 종 목록과 마스터 레코드가 있습니다. 주 기록 파일의 세 번째 열에서 일치하는 종을 검색하여 전체 행을 인쇄하고 싶습니다.
종 목록
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 파일의 첫 번째 열이 다음과 같다고 가정하면속두 번째 열은종
마스터 레코드
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
그러나 내가 얻는 것은 속이나 종이 일치하는 계통뿐이지 둘 다는 아닙니다. 또한 세 번째 열에 대한 검색을 지정하지 않습니다.
저도 awk
사용해봤는데
awk 'NR=FNR{a[$0]; next}{if ($3 in a){print $0}}' species_list master_record
그러나 결과가 없습니다.
추신: 저는 스크립팅 초보자입니다. 제공된 도움에 감사드립니다. 감사해요!
답변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번만 나타납니다.