Bonjour,
Je voudrais compter le nombre d'occurences d'un motif par ligne d'un fichier. le format du fichier est le suivant:
> Agrobacterium tumefaciens str. C58 [gi 15891781 |hypothetical protein AGR_L_3324 ] : WalkerA (36)
Bonjour,
Je voudrais compter le nombre d'occurences d'un motif par ligne d'un fichier. le format du fichier est le suivant:
> Agrobacterium tumefaciens str. C58 [gi 15891781 |hypothetical protein AGR_L_3324 ] : WalkerA (36)
oui et ?????
t'as fait quoi comme script, ou est ton souci? quel est ton motif??:
:
![]()
![]()
:
désolée, jai zappé de préciser! trop de boulot tue mon petit cerveau...
je recherche différent motif en fait. le script de recherche est déjà fait. c'est juste qu'on me demande de faire une analyse statistique des résultast et que ce que je fais ne marche pas très très bien. je fais une analyse du fichier d'output du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if (($output =~ m/WalkerA/g) and ($output =~ m/LSGGQ/g) and ($output =~ m/LLPED/g)){ $nb_WLP ++; }
Le format du fichier de sortie est le suivant:
> Acinetobacter sp. ADP1 [gi 50083328 |alkanesulfonate transport protein (ABC superfamily, atp_bind) ] : WalkerA (67) LSGGQ (159) LLDEP (181)
et jaimerais par exemple savoir le nombre de séquences qui contiennent ces 3 motifs en même temps (la plupart du temps, elles ne les contiennent pas en même temps).
Edité par GLDavid. On utilise les balises code et non quote pour le codePrière aussi de décocher la case "Désactiver le BBCode dans ce message" pour vos threads.
Salut
Ta condition est mal écrite. D'autre part, ce que tu veux, c'est tester la présence de ces 3 séquences et d'en tirer des stats. Je te propose le code ci-dessous qui testera à la manière d'un switch la présence simultnée ou non de tes séquences.
Je pense que tu pourras en écrire une fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #!/usr/bin/perl -w use strict; use Carp; my $output = "> Acinetobacter sp. ADP1 [gi 50083328 |alkanesulfonate transport protein (ABC superfamily, atp_bind) ] : WalkerA (67) LSGGQ (159) LLDEP (181) "; if ($output =~ m/WalkerA/g){ print "WalkerA présent\n"; if($output =~ m/LSGGQ/g){ print "LSGGQ présent aussi\n"; if ($output =~ m/LLDEP/g){ print "Les 3 séquences sont présentes !\n"; } } elsif ($output =~ m/LLDEP/g){ print "LLDEP présent aussi\n"; } } elsif ($output =~ m/LSGGQ/g){ print "LSGGQ présent\n"; if ($output =~ m/LLDEP/g){ print "LLDEP présent aussi\n"; } } elsif($output =~ m/LLDEP/g){ print "LLDEP présent\n"; } else { print "Y a rien dedans !\n"; }
En espérant t'avoir aidé, amie bioinformaticienne
@++
GLDavid, qui veut lancer L'Amicale des bioinformaticiens de dvp.com.
merci!!
ca marche!
jai juste une question pourquoi ton if($output =~ m/LSGGQ/g) n'a pas de else?? je croyais ke yavait forcement un else avec les elsif.......
Euh lequel ? Car il y en a beaucoup
@++
Ca va pas !! On va pas mettre un else si y a rien à mettre dedans !je croyais ke yavait forcement un else avec les elsif.......
Encore heureux que Perl soit assez souple pour qu'on ne soit pas obligé de mettre des trucs inutiles comme ça : tous les langages de programmation font pareil. On peut mettre un if puis autant de elsif qu'on veut (on peut en mettre 0), puis un else si on veut (mais on est pas obligé !!!).![]()
--
Jedaï
ok, ben je savais pas! pour moi kan tu mets un elsif yavait forcement un else... c bon a savoir!!
Au passage, un petit tag Résolu si c'est bon.
@++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager