Bien le bonjour !
Voilà, j'aurai besoin de votre aide pour un petit script perl (ou bash ?) de dépannage.
En effet, mon maître de stage a quelques énormes retours de Blastx en fichiers textes d'une taille minimale de 1.2Go... Plutôt énormes donc, et inouvrables.
Pour alléger tout ça, on m'a demandé de supprimer les informations "inutiles" des retours ( les références notamment).
Pour compléter, on m'a aussi demandé de supprimer des résultats où aucun hit n'est trouvé, tout en enregistrant dans un nouveau fichier la liste des query concernées. Cet aspect là ne me parait pas bien compliqué, je me débrouillerai.
Donc, pour visualiser, voici ce que je dois obtenir après traitement (parties en rouge à supprimer, en bleu à sauvegarder dans autre sortie, en vert fichier en lecture modifié) [ici c'est un tblastn, mais ça ne change rien au principe] :
Idéalement, je voudrais éviter de recréer un nouveau fichier, étant donné la taille du fichier initial. Mais je n'arrive pas à trouver comment supprimer des lignes dans un fichier en lecture. Voici l'état de mon code actuellement :TBLASTN 2.2.21 [Jun-14-2009]
Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer,
Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997),
"Gapped BLAST and PSI-BLAST: a new generation of protein database search
programs", Nucleic Acids Res. 25:3389-3402.
Query= chromo1_4117
(158 letters)
Database: /home/noirham/Programmation/Stage/cnrs/002
2 sequences; 103,754 total letters
Searching..................................................done
***** No hits found ******
TBLASTN 2.2.21 [Jun-14-2009]
Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer,
Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997),
"Gapped BLAST and PSI-BLAST: a new generation of protein database search
programs", Nucleic Acids Res. 25:3389-3402.
Query= chromo1_4391
(231 letters)
Database: /home/noirham/Programmation/Stage/cnrs/002
2 sequences; 103,754 total letters
Searching..................................................done
Score E
Sequences producing significant alignments: (bits) Value
0002 20 7.8
>0002
Length = 58817
Score = 19.6 bits (52), Expect = 7.8, Method: Compositional matrix adjust.
Identities = 9/28 (32%), Positives = 15/28 (53%)
Frame = -1
Query: 152 CPLLPVREPCCVCLKSLRLLLFRSPPPF 179
C L + P C C+ S+ + ++ SP F
Sbjct: 18161 CKL*RIDSPNCFCISSVVIPIYVSPINF 18078
Ce script a pour merveilleux effet de me supprimer l'intégralité du fichier...
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 #!/usr/bin/perl use strict; use warnings; my $name_file = ""; my $outfile_a = ""; my $outfile_b = ""; #my $parser = ""; my $result = ""; ($name_file)=$ARGV[0]=~/([\w\-_]+\.)txt/ ; $outfile_a = $name_file."no_hit"; #$outfile_b = $name_file."clean.txt"; open(IN, "+>$ARGV[0]")|| die "cannot open $ARGV[0]"; #ouvre le fichier passé en arguments open(OUT, ">$outfile_a")|| die "cannot create $outfile_a"; #crée le fichier de sortie no_hit #open(OUT, ">$outfile_b")|| die "cannot create $outfile_b"; #crée le fichier de sortie no_hit while (<IN>) { s/Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer,//; #Pour remplacer la 1ere ligne de référence par une expression vide } close(IN); close(OUT);
Ce qui me bloque pour l'instant, c'est simplement le fait que je ne connaisse pas d'astuce pour supprimer une ligne... Le reste n'est qu'une question d'expression.
Je vous remercie d'avance pour votre aide précieuse.
Partager