###### PASSAR DE MULTIFASTA A DIVERSOS FASTA ###### my $proteines_multifasta = 'proteines_multifasta.fa'; my @vector; # Vector en el qual emmagatzarem cada linia del nostre document multifasta my @n; # Vector en el qual emmagatzamem les primeres linies de cada proteina, les que començen amb >, per tal de donar nom al document my $nomfitxer; my $comptador = 1; #comptador que evita que es tanqui un document la primera vegada que entrem al bucle el qual encara no hem obert, i si ens tanqui els documenta en la resta de voltes open (FASTA, $proteines_multifasta)|| die ("can't open $proteines_multifasta"); # Obres el document multifasta sote el head FASTA system ("mkdir ./selenoproteines"); # Accio de crear una carpeta al home que s'anomenara com la proteina i on guardarem la proteina corresponent while () #Mentre que hi hagin linies al document, el bucle anira fent { @vector = split (//,$_); # Emmagatzemar cada linia en questio en el vector if($vector[0] eq ">") # Amb aquest if només hi entrarem si ens trobem en la primera linia de un sequencia, per aixo obrirem un vector { if ($comptador != 1) # Aquest if el fem servir per poder tencar el documents un cop hem arribat a una nova sequencia, i ho posem aixi per que es la manera per evitar tencar un document inexistent en el cas del primer { close OUTPUT; } $comptador = $comptador + 1; @n = split (" ", $_); $nomfitxer = substr ($n[0], 1); # Aquí escollim la primera posicio del vector n (que es la primera linia de cada proteina) que sera el nom de la proteina, i eliminem la primera posicio que sera el > system ("mkdir ./selenoproteines/$nomfitxer"); # Accio de crear una carpeta al home que s'anomenara com la proteina i on guardarem la proteina corresponent open (OUTPUT, ">", "./selenoproteines/$nomfitxer/$nomfitxer.fa"); # obrir documentfasta sota el nom de la variable i sota un head OUTPUT (que no variara en tot el programa, nomes variara el nom del fitxer) } print OUTPUT $_; # aquest print va incloent les linies d'aminoacids dins del document fasta fins que es torna a trobar un > }