#!/usr/bin/perl -w
use strict;
my $input_file1;
my $input_file2;
my @protid;
my $protid;
my $p; #variable q recorre el vector protid
my $detector;
my $id;
if (scalar(@ARGV) < 2) #si al ejecutar el programa no has dado el nombre del fichero,imprime error y cierra
{
print STDERR "entrar: nom_del_programa fitxer1 fitxer2\n";
exit(1);
}
$input_file1=$ARGV[0]; #llama input file al fichero que esta en la posicion 0 del vector argv
$input_file2=$ARGV[1];
#print "input_file1: $input_file1\n"; #imprime los ficheros que se han abierto para ejecutar el programa
#print "input_file2: $input_file2\n";
#################################################################################################################
# PRIMERA PARTE: EL PROGRAMA FILTRA LOS IDENTIFICADORES DE PROTEINAS DEL RESTO DE IDENTIFICADORES (input_file1) #
#################################################################################################################
open(IN,"<$input_file1") || die " cannot open input file1\n"; #si el fichero no se puede abrir, imprime esto y cierra el programa
$p = 0;
while () { #mientras haya lineas para leer
if (($_ =~m/(ENSP[0-9]+)/) || ($_ =~m/(SINFRUP[0-9]+)/) || ($_ =~m/(ENSGALP[0-9]+)/) || ($_ =~m/(GSTENP[0-9]+)/)) {
$protid[$p] = $1; #guarda los identificadores validos en un vector
$p = $p + 1;
}
}
close(IN); #cierra el programa
#######################################################################################################################
# SEGUNDA PARTE: EL PROGRAMA ASIGNA LA SECUENCIA(input_file2) CORRESPONDIENTE AL IDENTIFICADOR DE PROT (input_file1) #
#######################################################################################################################
$detector = 0;
$p = 0;
while ($p < scalar(@protid)) { #recorre el vector con los identificadores que nos interesan
open(IN,"<$input_file2") || die " cannot open input file2\n";
while() { #mientras haya lineas para leer
if ($_=~m/(^>)/) { #si la linea empieza con un <, es decir es fasta
$id = "";
$detector =0;
if (($_ =~m/(ENSP[0-9]+)/)||($_ =~m/(SINFRUP[0-9]+)/)||($_ =~m/(ENSGALP[0-9]+)/)||($_ =~m/(GSTENP[0-9]+)/)) {
$id = $1; #si es un identificador guardalo en esta variable
if ($id eq $protid[$p]) { #compara este identificador con el del vector, si son iguales imprime
print "\n>$id\n";
$detector = 1; #detector para seƱalar las lineas que siguen a fastas validos
}
}
}
else { #si no es un fasta
if ($detector == 1) { #pero le sigue a un fasta valido, es la secuencia perteneciente al identificador valido
chomp $_;
print "$_"; #imprimelo
}
}
}
close(IN); #cierra el programa
$p= $p + 1;
}