0

これでpythonとperlにタグを付けたのは、これまで使用してきたからです。誰かがこれについて行くより良い方法を知っているなら、私は確かにそれを試してみるつもりです。とにかく、私の問題:

次の形式に従う遺伝子予測プログラムの入力ファイルを作成する必要があります。

seq1 5 15
seq1 20 34

seq2 50 48
seq2 45 36

seq3 17 20

ここで、seq#はgeneIDであり、右側の数字はオープンリーディングフレーム内のエクソンの位置です。これで、他の多くの情報を含む.gff3ファイルにこの情報があります。これをExcelで開き、関連性のないデータを含む列を簡単に削除できます。現在の配置は次のとおりです。

PITG_00002  .   gene    2   397 .   +   .   ID=g.1;Name=ORF%
PITG_00002  .   mRNA    2   397 .   +   .   ID=m.1;
**PITG_00002**  .   exon    **2 397**   .   +   .   ID=m.1.exon1;
PITG_00002  .   CDS 2   397 .   +   .   ID=cds.m.1;

PITG_00004  .   gene    1   1275    .   +   .   ID=g.3;Name=ORF%20g
PITG_00004  .   mRNA    1   1275    .   +   .   ID=m.3;
**PITG_00004**  .   exon    **1 1275**  .   +   .   ID=m.3.exon1;P
PITG_00004  .   CDS 1   1275    .   +   .   ID=cds.m.3;P

PITG_00004  .   gene    1397    1969    .   +   .   ID=g.4;Name=
PITG_00004  .   mRNA    1397    1969    .   +   .   ID=m.4;
**PITG_00004**  .   exon    **1397  1969**  .   +   .   ID=m.4.exon1;
PITG_00004  .   CDS 1397    1969    .   +   .   ID=cds.m.4;

したがって、太字のデータのみが必要です。例えば、

PITG_0002 2 397

PITG_00004 1 1275
PITG_00004 1397 1969

あなたが与えることができるどんな助けでも大いに感謝されるでしょう、ありがとう!

編集:まあ、私はフォーマットを台無しにしました。**の間にあるものはすべて私が必要なものです笑。

4

4 に答える 4

2

Unixの場合:

grep <file.gff3 " exon " |
    sed "s/^\([^ ]+\) +[.] +exon +\([0-9]+\) \([0-9]+\).*$/\1 \2 \3/"
于 2013-01-11T21:15:04.043 に答える
1

歩行者の場合:

(これはPythonです)

with open(data_file) as f:
    for line in f:
        tokens = line.split()
        if len(tokens) > 3 and tokens[2] == 'exon':
            print tokens[0], tokens[3], tokens[4]

印刷する

PITG_00002 2 397
PITG_00004 1 1275
PITG_00004 1397 1969
于 2013-01-11T21:12:22.120 に答える
1

データがタブで区切られているようです。

このPerlプログラムは、3番目の列にあるすべてのレコードから列1、4、および5を出力しexonます。openステートメント内のファイル名を実際のファイル名に変更する必要があります。

use strict;
use warnings;

open my $fh, '<', 'genes.gff3' or die $!;

while (<$fh>) {
  chomp;
  my @fields = split /\t/;
  next unless @fields >= 5 and $fields[2] eq 'exon';
  print join("\t", @fields[0,3,4]), "\n";
}

出力

PITG_00002  2 397
PITG_00004  1 1275
PITG_00004  1397  1969
于 2013-01-12T00:24:50.753 に答える
0

Perlスクリプトオプションは次のperl scriptName.pl file.gff3とおりです。

use strict;
use warnings;

while (<>) {
    print "@{ [ (split)[ 0, 3, 4 ] ] }\n" if /exon/;
}

出力:

PITG_00002 2 397
PITG_00004 1 1275
PITG_00004 1397 1969

または、次のようにすることもできます。

perl -n -e 'print "@{ [ (split)[ 0, 3, 4 ] ] }\n" if /exon/' file.gff3

データをファイルに保存するには:

use strict;
use warnings;

open my $inFH,  '<',  'file.gff3' or die $!;
open my $outFH, '>>', 'data.txt'  or die $!;

while (<$inFH>) {
    print $outFH "@{ [ (split)[ 0, 3, 4 ] ] }\n" if /exon/;
}
于 2013-01-11T21:46:40.027 に答える