Antes quiero agradecerles la ayuda, pues he ido concluyendo mi primer script que lee archivos de alineamientos (.pir), les hace algo a las secuencias y luego las imprime nuevamente.
La duda ahora es la siguiente:
Mi script me arroja algo así como:
- Código: Seleccionar todo
aaaadigupaaaaapdduthhhhhhqrt98yyyyyyyyyyyyyyyyy9puhoqhghggaoihggggggggggggggggggqo
ioquuuyhhhhhhhhuirphgfjvnaaapi9uig (aquí termina la secuencia)
nbugqiprrryhpuiiiiiiiiiiiiiiiiiinfaddddjhgggggggggagoqhrihgoqhrrrrrhqioogqnrogqhjhgajkdddddyhgfuirrius
ndpppppppppppppppppppppqhg4gir (aquí termina la secuencia)
jniophgirhqqhhgklngaingauinroggggghqerrrrrrrrrrrrrrrrrrrrrrrhguoqkjagbsduuuuhgggggggggggggggg
nnioqhreeeeeeeqqqqqqqqqqiheqqio (aquí termina la secuencia)
.
.
.
.
etc.
Necesito darle formato fasta a esta cadenas y que quede más o menos así,
- Código: Seleccionar todo
añhdjhaohhhhhabpphañuoahsqrrrgggqqqqqqtggfa
nalhhhhhhhhhhhhhhhhiohgdaiqaahrrqehqehhhhdf
akjhauhuidhsqiuhhughuuuiiihqafdhqe4yttqfhhwhfd
akjhgaupppqha (aquí termina la primera secuencia; líneas de no más de 40 elementos)
kjqhguiiiiihrrrjgnbudfhggfkañjhhhhu9hp8rjkkhquhg
gnqrehhhguqhkjjjjbvuiihauhgfffqjanbgjjnnbuafihgfa
nnbauiheenrgo9brhbnfffffffuahhuhgjlfkjgoijfjnbvfub
jkabfigggggaba (aquí termina la segunda secuencia; líneas de no más de 40 elementos)
.
.
.
etc.
El script es el siguiente y, como he indicado anteriormente, me interesa modificar la última parte para que se vea en la pantalla algo así como les he comentado.
Using perl Syntax Highlighting
#!/usr/bin/perl
if (@ARGV<1){die "Usar pir8.pl y fichero.pir\n";};
open (PIR,$ARGV[0]) || die "Error, no puede leerse el archivo: '$ARGV[0]'\n";
use strict;
use warnings;
my @nombres;
my $head;
my $fichero;
while (<PIR>) {
if(/^>/) {
$head=substr($_,1);
{
push (@nombres,$_);
}
}
chomp $_;
$fichero.=$_;
}
close PIR;
#print $nombres[0];
#print "$fichero\n";
my @seqs;
my $sec;
while ($fichero=~ m/ \.FASTAC (.*?)\*/simogx) {
$sec= $1;
my @residues = split("",$sec);
push(@seqs,\@residues);
}
for(my $j=0; $j<scalar(@seqs); $j++) {
for(my $i=0; $i<scalar@{$seqs[$j]};$i++) {
if(${$seqs[0]}[$i] ne "-") {
if(($i%$longitud)=0)
print ${$seqs[$j]}[$i];
}
}
print"\n";
}
if (@ARGV<1){die "Usar pir8.pl y fichero.pir\n";};
open (PIR,$ARGV[0]) || die "Error, no puede leerse el archivo: '$ARGV[0]'\n";
use strict;
use warnings;
my @nombres;
my $head;
my $fichero;
while (<PIR>) {
if(/^>/) {
$head=substr($_,1);
{
push (@nombres,$_);
}
}
chomp $_;
$fichero.=$_;
}
close PIR;
#print $nombres[0];
#print "$fichero\n";
my @seqs;
my $sec;
while ($fichero=~ m/ \.FASTAC (.*?)\*/simogx) {
$sec= $1;
my @residues = split("",$sec);
push(@seqs,\@residues);
}
for(my $j=0; $j<scalar(@seqs); $j++) {
for(my $i=0; $i<scalar@{$seqs[$j]};$i++) {
if(${$seqs[0]}[$i] ne "-") {
if(($i%$longitud)=0)
print ${$seqs[$j]}[$i];
}
}
print"\n";
}
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
Adicionalmente, he guardado los head de cada secuencia en el array nombres y deseo ponerle, en la salida su head a cada secuencia nuevamente.
Otra vez, cualquier ayuda será importante.