質問

基本的には、GenBankファイルは、ここでここで示す2つの表示を示す2つのような遺伝子エントリ( '遺伝子'とそれに対応する 'CDS'エントリー(遺伝子ごとの1つだけ)で構成されています。私はlocus_tag vs製品を望みますタブ区切りの2列の列ファイル '遺伝子'と「CDS」は常に前に配置され、続いてスペースが続きます。

前の質問を提案しました。

問題は、「製品」がその名前の中に「/」文字があることがあるため、このスクリプトとの競合を有しているため、理解できる限り、「/」を保存するように '/'を使用しているようです。アレイ内の情報?

これを解決したいのですが、このスクリプトを変更したり、他のものを構築したりすることを望みます。

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"
.

役に立ちましたか?

解決

サンプルGenbankファイルが不完全だったので、例で使用できるサンプルファイルを見つけるためにオンラインになり、このファイル

このコードと Bio::GenBankParser モジュール、どんな部分を推測したあなたが後にいた構造の。この場合、locus_tagフィールドとproductフィールドの両方を含む「機能」。

use strict;
use warnings;
use feature 'say';
use Bio::GenBankParser;

my $file = shift;
my $parser = Bio::GenBankParser->new( file => $file );
while ( my $seq = $parser->next_seq ) {
    my $feat = $seq->{'FEATURES'};
    for my $f (@$feat) {
        my $tag = $f->{'feature'}{'locus_tag'};
        my $prod = $f->{'feature'}{'product'};
        if (defined $tag and defined $prod) {
            say join "\t", $tag, $prod;
        }
    }
}
.

使用量:

perl script.pl input.txt > output.txt
.

出力:

MG_001  DNA polymerase III, beta subunit
MG_470  CobQ/CobB/MinD/ParA nucleotide binding domain-containing protein
.

同じ入力のための1つのライナーからの出力は次のとおりです。

MG_001  DNA polymerase III, beta subunit
MG_470  CobQ/CobB/MinD/ParA nucleotide binding
                     domain-containing protein
.

もちろん、マルチラインエントリのアカウントに/s修飾子をQuexに追加した場合( Leeduhem が指摘したコメント):

m!/(?:locus_tag|product)="(.+?)"!sg
#                                ^---- this
.

他のヒント

Having read your duplicated question http://www.biostars.org/p/94164/ (please don't double post like this), here's a minimal Biopython answer:

import sys
from Bio import SeqIO
filename = sys.argv[1] # Takes first command line argument input filename
for record in SeqIO.parse(filename, "genbank"):
    for feature in record.features:
        if feature.type == "CDS":
            locus_tag = feature.qualifiers.get("locus_tag", ["???"])[0]
            product = feature.qualifiers.get("product", ["???"])[0]
            print("%s\t%s" % (locus_tag, product))

With minor changes you can write this out to a file instead.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top