Написать старый заголовок fasta и новый в файл - PullRequest
0 голосов
/ 24 октября 2018

Я хочу извлечь старые имена fasta, которые выглядят примерно так:

>Bartonella bibbi
AUUCCGGUUGAUCCUGCCGGAGGCCACUGCUAUCGGGGUCCG

Новые заголовки должны выглядеть следующим образом:

>Seq1
AUUCCGGUUGAUCCUGCCGGAGGCCACUGCUAUCGGGGUCCG

и так далее ...Бартонелла Бибби должна быть сохранена вместе с новым именем Seq1 в новом файле и так далее.Итак, я начал с поиска строк с>, а затем разделился, чтобы получить массив, чтобы получить старое имя.Я не знаю, как продолжить, потому что я хочу здесь две вещи: сначала вставить туда новое имя, а также извлечь старое имя вместе с новым в файл, а также получить выходной файл с моей последовательностью и моимновые имена.Пожалуйста, любой ввод от вас поможет!

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";

while (my $line = <$IN>) {
 if ($line =~ /^>/) {

my @header = split (/\>/, $line);

    my $oldfasta = "$header[1]";

}
}

Итак, после некоторых изменений, это текущий скрипт:

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";

my $seqid = 1;
my %id;

while (my $line = <$IN>) {
 if ($line =~ /^>/) {

     $id{"Seq$seqid "} = $line;
     print ">Seq$seqid\n";
     $seqid++
 } else {

     print $line;
 }


}

     my $outfile = 'output';
     open my $OUT, '>', $outfile or die "Could not open $outfile: $!, $?";  # overwrites the file $outfile;
     print $OUT %id;

Это дает мне файл, который выглядит следующим образом:

   Seq29  >Sulfophobococcus_zilligii

   Seq20 >Pyrococcus_shinkaii

и так далее.Они не в порядке, как мне отсортировать их и избавиться от> в названии вида?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Просто напишите новые записи по мере их создания.

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";
my $outfile = 'output';
open my $OUT, '>', $outfile or die "Could not open $outfile: $!, $?";  # overwrites the file $outfile;

my $seqid = 1;

while (my $line = <$IN>) {
     if ($line =~ /^>(.+)/) {
        print $OUT "Seq$seqid\t$1\n"
        print ">Seq$seqid\n";
        $seqid++
     } else {
        print $line;
     }
}

Я попытался исправить отступ, но оставил переменную для имени файла $OUT.

Если вы хотитесохранить отображение в памяти по другим причинам (возможно, превратить это в гораздо более сложный сценарий) с использованием массива вместо хеша - это естественный способ сортировки записей;новая метка тривиально выводится из индекса массива.

0 голосов
/ 25 октября 2018

Вы просто ничего не печатаете.Как только вы добавите оператор print, он должен работать.

Кроме того, неясно, для чего вы используете split.Просто увеличьте счетчик для последовательности:

#!/usr/bin/perl
use warnings;
use strict;

my $infile = $ARGV[0];
open my $IN, '<', $infile or die "Could not open $infile: $!, $?";

my $seqid = 1;

while (my $line = <$IN>) {
    if ($line =~ /^>/) {
        print ">Seq$seqid\n";
        $seqid++;
    } else {
        print $line;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...