Hola, grupo. Solicito de su ayuda para resolver un problema. Espero explicar bien el problema para que puedan ayudar a la solución.
Resulta que tengo la siguiente lista de genes abreviados:
Using text Syntax Highlighting
ACY1
RNA5S1
USP12-AS1
TRAJ23
ZFAT
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Y deseo buscar cada uno en el siguiente archivo de nombres:
Using text Syntax Highlighting
Approved Symbol Approved Name
A2MP1 alpha-2-macroglobulin pseudogene 1
ACY1 aminoacylase 1
SLIT2 slit guidance ligand 2
RN7SL843P RNA, 7SL, cytoplasmic 843, pseudogene
SP9YP24 ubiquitin specific peptidase 9, Y-linked pseudogene 24
USP12-AS1 USP12 antisense RNA 1
ZFAT zinc finger and AT-hook domain containing
ZIC5 Zic family member 5
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
El resultado que necesito es el siguiente:
Using text Syntax Highlighting
ACY1 aminoacylase 1
RNA5S1 -
USP12-AS1 USP12 antisense RNA 1
TRAJ23 -
ZFAT zinc finger and AT-hook domain containing
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Como se observa, RNA5S1 y TRAJ23 no se encuentran en el archivo de nombres por lo cual su resultado es "-".
Presento el
script que escribí:
Using perl Syntax Highlighting
use warnings;
open (ABREFILE, "Abrevlist.txt"); #Abre la lista de abreviaturas
while (<ABREFILE>){ #Lee cada línea
chomp;
$abrev = $_;
ind_sec(); #Envia la primer línea (abreviatura) a la subrutina
}
sub ind_sec{
open (NOMBREFILE2, "NombreFile.txt"); #Abre el archivo con nombres
while ($line = <NOMBREFILE2>){
if ($line =~ m/^$abrev\s/g){ #Buscar la abreviatura en la cada línea del archivo con nombres
print "$line"; #si la sentencia se cumple imprime la línea
} #
else{ #si la abreviatura no se encuentra
print "\t-"; # quiero que imprima la abreviatura con - por delante
}
}
}
close(ABREFILE);
close(NOMBREFILE2);
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
El resultado que consigo es el siguiente:
Using text Syntax Highlighting
ACY1 aminoacylase 1
USP12-AS1 USP12 antisense RNA 1
ZFAT zinc finger and AT-hook domain containing
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
el cual no incluye RNA5S1 y TRAJ23. Además el problema se complica cuando la lista de abreviaturas es más grande al igual que el archivo de nombres.
Mi principal dolor de cabeza es en la sentencia else{} porque me da respuesta para cada una de las líneas del archivo de nombres y solo quiero que responda solo una vez para todas esas líneas con un simple "-".
Espero contar con su apoyo. Saludos.