基本的に、GenBank ファイルは、以下に示す 2 つのように、遺伝子エントリ (「遺伝子」とそれに続く対応する「CDS」エントリ (遺伝子ごとに 1 つだけ) で発表されます。タブ区切りで locus_tag と製品を取得したいと思います。 2 列のファイル 'gene' と 'CDS' の前後には必ずスペースが入ります。
問題は、「product」の名前に「/」文字が含まれていることがあるため、このスクリプトと競合しているように見えることです。これは、私が理解できる限り、「/」をフィールドセパレーターとして使用して情報を配列?
このスクリプトを変更するか、別のスクリプトを作成して、これを解決したいと思います。
perl -nE'
BEGIN{ ($/, $") = ("CDS", "\t") }
say "@r[0,1]" if @r= m!/(?:locus_tag|product)="(.+?)"!g and @r>1
' file
gene complement(8972..9094)
/locus_tag="HAPS_0004"
/db_xref="GeneID:7278619"
CDS complement(8972..9094)
/locus_tag="HAPS_0004"
/codon_start=1
/transl_table=11
/product="hypothetical protein"
/protein_id="YP_002474657.1"
/db_xref="GI:219870282"
/db_xref="GeneID:7278619"
/translation="MYYKALAHFLPTLSTMQNILSKSPLSLDFRLLFLAFIDKR"
gene 68..637
/locus_tag="HPNK_00040"
CDS 68..637
/locus_tag="HPNK_00040"
/codon_start=1
/transl_table=11
/product="NinG recombination protein/bacteriophage lambda
NinG family protein"
/protein_id="CRESA:HPNK_00040"
/translation="MIKPKVKKRKCKCCGGEFKSADSFRKWCSAECGVKLAKIAQEKA
RQKAIEKRNREERAKIKATRERLKSRSEWLKDAQAIFNEYIRLRDKDEPCISCRRFHQ
GQYHAGHYRTVKAMPELRFNEDNVHKQCSACNNHLSGNITEYRINLVRKIGAERVEAL
ESYHPPVKWSVEDCKEIIKTYRAKIKELK"