Besoin d'aide pour trier des lignes dans un fichier

Résolu
joeoj -  
-
Bonjour,

je suis étudiant en biologie, et dans le cadre de mes recherches j'ai besoin de traiter l'ensemble des protéines d'un organisme pour savoir si elle sont sécrétées. J'ai réussi a effectué cette manip à l'aide du standalone de signalP, mais je me retrouve avec un fichier de 30000 lignes sous la forme :

# SignalP-4.0 euk predictions
# name Cmax pos Ymax pos Smax pos Smean D ? Dmaxcut Networks-used
IPI:IPI00000001.2 0.143 42 0.123 42 0.142 39 0.100 0.110 N 0.450 SignalP-noTM
IPI:IPI00000005.1 0.120 19 0.120 19 0.137 4 0.118 0.119 N 0.450 SignalP-noTM
IPI:IPI00000006.1 0.120 19 0.120 19 0.137 4 0.118 0.119 N 0.450 SignalP-noTM
IPI:IPI00000012.4 0.549 30 0.424 30 0.672 5 0.463 0.439 N 0.500 SignalP-TM
IPI:IPI00000013.1 0.658 18 0.768 18 0.931 15 0.891 0.834 Y 0.450 SignalP-noTM
IPI:IPI00000015.2 0.112 47 0.103 59 0.113 13 0.095 0.099 N 0.450 SignalP-noTM
IPI:IPI00000017.1 0.112 22 0.120 4 0.140 34 0.125 0.123 N 0.450 SignalP-noTM
IPI:IPI00000020.1 0.113 23 0.135 12 0.209 4 0.163 0.150 N 0.450 SignalP-noTM
IPI:IPI00000021.5 0.113 23 0.183 10 0.359 2 0.300 0.246 N 0.450 SignalP-noTM
IPI:IPI00000023.4 0.389 41 0.532 41 0.903 38 0.534 0.533 Y 0.450 SignalP-noTM

je voudrais maintenant réussir à récupérer toute les lignes ou la réponse est positive (Y sous la colonne "?") et les envoyer dans un nouveau fichier appelé sortie.
Je viens juste de commencer à m'atteler à l'apprentissage de Perl car je vais en avoir besion régulierement, cependant j'ai besoin de ce résultat rapidement et c'est au dessus de mes capacité pour l'instant ...
Si il y a quelques âmes charitable seraient disposées à m'aider, je serais très reconnaissant ;)

Jo

A voir également:

7 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

$ cat fich 
# SignalP-4.0 euk predictions
# name Cmax pos Ymax pos Smax pos Smean D ? Dmaxcut Networks-used
IPI:IPI00000001.2 0.143 42 0.123 42 0.142 39 0.100 0.110 N 0.450 SignalP-noTM
IPI:IPI00000005.1 0.120 19 0.120 19 0.137 4 0.118 0.119 N 0.450 SignalP-noTM
IPI:IPI00000006.1 0.120 19 0.120 19 0.137 4 0.118 0.119 N 0.450 SignalP-noTM
IPI:IPI00000012.4 0.549 30 0.424 30 0.672 5 0.463 0.439 N 0.500 SignalP-TM
IPI:IPI00000013.1 0.658 18 0.768 18 0.931 15 0.891 0.834 Y 0.450 SignalP-noTM
IPI:IPI00000015.2 0.112 47 0.103 59 0.113 13 0.095 0.099 N 0.450 SignalP-noTM
IPI:IPI00000017.1 0.112 22 0.120 4 0.140 34 0.125 0.123 N 0.450 SignalP-noTM
IPI:IPI00000020.1 0.113 23 0.135 12 0.209 4 0.163 0.150 N 0.450 SignalP-noTM
IPI:IPI00000021.5 0.113 23 0.183 10 0.359 2 0.300 0.246 N 0.450 SignalP-noTM
IPI:IPI00000023.4 0.389 41 0.532 41 0.903 38 0.534 0.533 Y 0.450 SignalP-noTM 

$ awk '/^IPI/ && $10 ~ /Y/ { print $0 }' fich 
IPI:IPI00000013.1 0.658 18 0.768 18 0.931 15 0.891 0.834 Y 0.450 SignalP-noTM
IPI:IPI00000023.4 0.389 41 0.532 41 0.903 38 0.534 0.533 Y 0.450 SignalP-noTM 

$

0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Oups désolé, je croyais avoir vu ton post dans le forum GNU/Linux, d'où ma réponse avec "awk" ;-\
0
joeoj
 
Merci beaucoup !

Pas de soucis, j'avais pas pensé qu'on pouvais le faire en bash, mais ca à l'air un peu plus simple et surtout ça marche, j'ai réussi à obtenir mon fichier, en modifiant un peu ta commande:
$ awk '/^KI/ && / Y / { print $0}' sortie_signalP>sortie.txt

Sur mon fichier à traiter les nom de protéines commençaient par KI au lieu de IPI et j'ai un peu galéré pour reussir à trouver comment imprimer dans un fichier plutôt que dans la console mais j'ai bien obtenu ce que je voulais !

Par contre je n'ai pas bien compris ce que représentait $0 après le print ?

Bonne journée

Jo
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Par contre je n'ai pas bien compris ce que représentait $0 après le print ?

$0 représente la ligne en cours, mais c'est facultatif, un print tout court aura le même effet.
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
salut zipe

ah ? et alors à quoi sert de mettre ces caractères non indispensables?

soit dit en passant, tu connais bien Perl ? quel(s) langage(s) utilises-tu ?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
ah ? et alors à quoi sert de mettre ces caractères non indispensables?
A faire joli ;-))
Non, en fait je ne connais que très sommairement awk et ne maîtrise pas toutes ses subtilités. Peut être aussi que sur certaines versions ce paramètre est indispensable, donc dans le doute, ça ne mange pas de pain.

soit dit en passant, tu connais bien Perl ? quel(s) langage(s) utilises-tu ?
Non, pas du tout. Et pour le langage, je n'en maîtrise et connais aucun, juste de bonnes bases en shell bash.
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Bonjour joeoj,

Quand je lis que tu t'es lancé dans Perl parce que tu vas avoir à l'utiliser régulièrement, ça me fait frémir.
Est-ce que tu t'es renseigné sur Perl avant de te lancer dans son apprentissage ? C'est un langage en perte de vitesse, il n'attire plus comme avant, pour deux raisons essentielles: il a des défauts (pas orienté objet de façon native, difficile à apprendre, illisible, hermétique) et Python qui est un langage de script comme lui l'a remplacé comme langage choisi par ceux qui veulent atteindre rapidement la capacité d'écrire de bon programmes dans un langage puissant.

Je te conseille fortement de t'intéresser un minimum à Python, c'est un langage dans lequel tu auras beaucoup plus et plus rapidement de productivité, avec un apprentissage de départ beaucoup plus aisé. Pour quelqu'un qui veut obtenir rapidement des résultats sans se casser les dents sur des complications inutiles, Python est parfait. C'est valable par rapport à Perl aussi bien que par rapport à Java et C++
0
joeoj
 
salut heyquem,

Pour répondre à ta première question, je ne suis pas renseigné plus que ça sur le perl avant de me lancer. A vrai dire je suis en thèse de biologie et la programmation ce n'est pas vraiment ma spécialité :)
Cependant par rapport à mon sujet : l'étude de variation de l'ensemble des protéines suite à différents stress, je génère des quantités gigantesques de donnée. Chaque analyse génère des rapport d'abondance avant et après stress pour plus de 20 à 30000 protéines, sans compter le fait qu'on effectue au moins chacune des analyses en triplicats.
Pour intégrer et tirer du sens dans tout ça, j'utilise massivement les statistiques. Mais une fois les candidats protéiques sélectionnés il faut encore que j'étudie les séquences, et ce, souvent à l'aide d'algo déjà écrit en perl. En fait je crois que dans la bio ce langage reste encore très utilisé pour tout ce qui touche à l'analyse de séquence.
En tout cas ce sont les bio-informaticiens de mon labo qui bossent en perl et qui m'on conseillé de me lancer dans cet apprentissage.
Mais bon si tu me dit que le python est plus simple et plus facile d'accès je vais peut être m'y pencher un peu pour voir si il me permettra d'arriver à ce que je veux !
Mer ci pour tes conseils ;)
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
"En fait je crois que dans la bio ce langage reste encore très utilisé pour tout ce qui touche à l'analyse de séquence.
En tout cas ce sont les bio-informaticiens de mon labo qui bossent en perl et qui m'on conseillé de me lancer dans cet apprentissage."

Bien sûr, il y a une inertie dans tout. Ils t'ont conseillé Perl parce qu'ils pratiquent Perl, ça paraît tellement couler de source pour eux. Perl ayant été très utilisé à une époque et avec des qualités indéniables pour le genre de traitement que tu décris, il y a beaucoup de gens qui l'ont pratiqué et beaucoup parmi ceux-ci qui continuent à l'utiliser. Mais ça ne veut pas dire que Perl va rester le meilleur langage pour fair de la bio-informatique jusqu'à la fin des temps (et Python non plus d'ailleurs pour essayer d'être objectif). Seulement, ce serait bien que les vieux barbons avec de l'expérience cherchent aussi à comparer leurs outils anciens aux évolutions qui ont eu lieu depuis leurs apprentissages de leurs outils.

Je ne me fais aucun souci pour la capacité de Python à obtenir les mêmes résultats qu'avec Perl, non seulement de par ses qualités propres, mais aussi parce qu'il y a une quantité effarantes d'extensions dans tous les domaines et qu'il y en a évidemment pour faire de la bio-informatique. Tu peux en avoir une idée ici:
https://pypi.org/
L'un des atouts de Python est de pouvoir facilement utiliser des programmes dans d'autres langages. Ainsi est-il possible d'utiliser la bibliothèques du langage R qui possède beaucoup de programmes spécialisés en statistique, d'après ce que j'ai lu,car moi même je n'ai encore jamais pratiqué ce genre de recours à d'autres langages.
Encore un avantage: Python peut être utilisé comme liant entre systèmes hétérogènes. Par exemple, il permet de faire du contrôle d'appareils de façon très satisfaisante. C'est ce que j'ai lu d'un scientifique dans un numéro de GNU Linux Mag il y a 4 ou 5 ans.
Enfin bref, Python on peut en parler des heures. Mais le mieux à mon avis, c'est de le tester, et en parallèle avec un autre langage c'est à mon avis encore mieux, on voit tout de suite la différence.
Je peux te donner quelques tuyaux de départ si tu veux, bien que je n'ai pas trop de temps. Mais il y a des forums consacrés à Python qui t'apporteraient toutes les réponses voulues mieux qu'ici. Bon, tu vois.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
joeoj
 
hé hé effectivement il y a une grosse inertie dans les labo, et c'est valable pour tous les domaines malheureusement.
Je viens de passer un peu de temps à regarder un peu ce que propose le python et effectivement c'est un peu le jour et la nuit comparé au perl en terme de lisibilité. Je suis tombé sur un petit cour d'intro plutôt bien fait :http://python.developpez.com/cours/TutoSwinnen/?page=Chapitre4
Donc je crois que je vais m'y pencher un peu pour voir ce que je peux en faire, mais il a effectivement l'air prometteur et surtout beaucoup plus accessible !
En tout cas merci pour ton conseil et je suis preneur si tu as d'autre tuto intéressant !
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
Tiens , d'ailleurs, je viens d'écrire en Python le programme pour faire ce que tu as décrit dans ta question, juste après avoir posté mon précédent message:


import re   

regx = re.compile(' Y [\d.]+ Signal')   

with open('bio.txt','r') as f:   
    generY = (line for line in f if regx.search(line))   
    with open('sortie.txt','w') as g:   
        g.writelines(generY)


EDIT

Le code ci-dessus marchera pour n'importe quel fichier d'entrée, même s'il fait 35 GB

Si le fichier d'entrée n'est pas gigantesque, et qu'il peut être lu en entier, c'est à dire que son contenu peut être accueilli dans la RAM (par l'instruction f.read() ci dessous), le programme suivant fera le même travail, en lançant l'expression régulière regx sur tout le contenu du fichier d'un coup, pas ligne par ligne comme dans le précédent:

import re  

regx = re.compile('^.+? Y [\d.]+ Signal.+\r?\n?',re.MULTILINE)  

with open('bio.txt','r') as f:  
    lu = f.read()  
with open('sortie.txt','w') as g:  
    g.writelines(regx.findall(lu))



.
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   131
 
A vrai dire , je n'ai jamais lu de tuto, et je n'aime pas tellement le Swinnen, il est trop lent à exposer les choses, et pas très bien à mon avis. Quelqu'un qui a un cerveau qu marche bien, il pige vite les choses, un tuto comme Swinnen fait durer durer, à mon avis. Enfin bon, chacun voit.
Je m'instruis sur Python en lisant attentivement la doc, qui est pas mal faite, bien qu'à la longue on s'aperçoit de quelques insuffisances, et en lisant de bons forums Python. Je te conseille le forum Python de developpez.com , en français, , et si tu veux lire du très haut niveau, il y a stackoverflow. Suis désolé de dire ça par rapport à ce site CCM, mais les intervenants Python ici ne sont pas légion, et comment dire , loin du niveau de stackoverflow. Pourtant c'est CCM qui m'a aidé à choisir Python parce qu'il ont des présentations de sujets bien faites, je trouve, et celle sur la prog m'a bien aidé à choisir.

Encore une chose:
"A vrai dire je suis en thèse de biologie et la programmation ce n'est pas vraiment ma spécialité"
Je crois que c'est justement pour des cas comme ça que Python est une bénédiction. Car en même temps, comment se passer de piger un minimum la prog dans un domaine comme la biologie moléculaire ou la génétique ? Hein, je vous le demande, Mme Michu.

edit
Tiens je viens de tomber là-dessus, ça a l'air pas mal pour s'imprégner rapidement de la syntaxe et de possibilités hyperbasiques de Python
https://www.stavros.io/tutorials/python/
0