두 개의 일치하는 문자열이 있는 파일을 동시에 추출합니다.

두 개의 일치하는 문자열이 있는 파일을 동시에 추출합니다.

데이터베이스에 종 목록과 마스터 레코드가 있습니다. 주 기록 파일의 세 번째 열에서 일치하는 종을 검색하여 전체 행을 인쇄하고 싶습니다.

종 목록

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

grepfor 루프를 시도 중입니다.

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번만 나타납니다.

관련 정보