#1 Le 12/02/2020, à 20:02
- ColdDuke
Copier parties d`un fichier texte dans des fichier texte avec un nom
Bonsoir,
Je debute avec les lignes de commande mais j`en ai besoin pour le travail.
j`ai un fichier contenant du texte de la facon suivante :
>CNAG_00002-A1
MCPVIPKFTSMKYFLRATTAAGMERVKEKVMPCFEAAALATGCTHSVKFNDLLTDIRNCK
PIGELFSETMSTMFNIHTAQRYHDWSGGGLSTDFGNVTYAMPSCHPFYGIPCDPKRMNHT
AEFEQNARGDKSHEETWKVATGMAAVGLKLFRDPSFSKEAGEKDMRGDFTP
>CNAG_00003-A1
MSTEIQSEVSTLAVGSALPPGCSFGSVHRFSRQNAVPLTSQSGPCPPECQDLIVIWVDFP
PQSPEDPFHFSSSRKVIIMILVLFFAFITTWEMSSYSVSTSSMRRDFGVPEVDAALGLSL
YGWGFAVGPLVLAPITEEYGRYLYTILHLMLSLGKNISTILVGRFLLGLTGC
IGPTLTPGFIADIYPPEKRGSPMAIFTFILLTGPAIGAMSMGFVEANQHMQWRWVQWIQL
IIMGVFTPLMIVGLRETRSLVVLQRQAKRLRKERALQDGGRYTARAEINRMHLLPALKRS
IGRPFLFLFMEPIVTSFALWTAVVWGVYFIVISGLPYVFSKLHGWNIQITGVAYLAVAVG
SFFGFLGNFAQDAVYRRRAAKDFLRILLGSSFAIFTENMFNTLTVR
YSLIMMGGIAMLLAPIPFVMFFKGPWIRDHSPYSKRLIAEEQKRLDKSEINLEALA
Je souhaiterais copier chaque partie de mon fichier commencant par > jusqu'au > suivant (non inclu dans la copie) et le coller dans un fichier dont le nom sera le CNAG_XXXX-AX associe. En resume, je veux un fichier nomme CNAG_00002-A1 contenant
>CNAG_00002-A1
MCPVIPKFTSMKYFLRATTAAGMERVKEKVMPCFEAAALATGCTHSVKFNDLLTDIRNCK
PIGELFSETMSTMFNIHTAQRYHDWSGGGLSTDFGNVTYAMPSCHPFYGIPCDPKRMNHT
AEFEQNARGDKSHEETWKVATGMAAVGLKLFRDPSFSKEAGEKDMRGDFTP
et ainsi de suite pour les autres parties de mon fichier.
Est-ce que vous auriez une commande qui me permettrai de faire cela svp (si possible avec les explications pour que je puisse progresser) ?
Merci d'avance pour votre aide !
Hors ligne
#2 Le 12/02/2020, à 20:38
- pingouinux
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
Bonjour,
awk 'substr($0,1,1)==">"{fic=substr($0,2)}{print >fic}' donnees
substr($0,1,1)==">"{fic=substr($0,2)} : Si le premier caractère de la ligne est >, on met dans fic le nom du fichier
{print >fic} : On écrit la ligne dans le fichier en question
Hors ligne
#3 Le 12/02/2020, à 21:09
- ColdDuke
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
Merci pour cette reponse, la commande marche mais il y a 2 problemes :
j'ai un message d'erreur :
makes too many open files
input record number 155, file ../Reference/protein_isoform.txt
source line number
et je n'ai que 16 fichiers (il devrait y en avoir plusieurs milliers).
Hors ligne
#4 Le 12/02/2020, à 21:24
- pingouinux
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
As-tu beaucoup de fichiers ouverts sur ton ordinateur ? Je viens de tester la commande en #2 avec 18 fichiers, et ça passe sans problème.
Peux-tu montrer les lignes 154 à156 du fichier ./Reference/protein_isoform.txt ?
Hors ligne
#5 Le 12/02/2020, à 21:30
- Watael
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
gawk '/^>/{if(fic)close(fic); fic=substr($0,2)}{print >fic}' donnees
?
Dernière modification par Watael (Le 12/02/2020, à 21:30)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 12/02/2020, à 21:42
- ColdDuke
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
Non seulement le navigateur et le terminal.
J'ai reussi a avoir tout mes fichiers (+ de 7000) avec la commande
awk 'substr($0,1,1)==">"{fic=substr($0,2)}{print >fic}close(fic)' fichier_donnee
En revanche, j'ai un ? a la fin du nom de chaque fichier.
Voici les lignes
154 DLGDTLLNGNNIAMLIPGGKGPKA
155 >CNAG_00017-A1
156 MCINVCISVTTLFHTVLVSAAMATFTPGVSPTSCPAISSPQPPPSPVSPDPSTIISPKNR
Dernière modification par ColdDuke (Le 12/02/2020, à 21:43)
Hors ligne
#7 Le 12/02/2020, à 21:50
- ColdDuke
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
La commande gawk n'est pas reconnu sur mon ordi (macOS) et j,ai essaye de l'installer mais je n'ai pas les permission pour (ordinateur de travail).
Hors ligne
#8 Le 12/02/2020, à 21:51
- pingouinux
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
En revanche, j'ai un ? a la fin du nom de chaque fichier.
N'aurais-tu pas un fichier type Windows, avec des lignes se terminant par \r\n au lieu de \n.
J'ai fait un test, et j'obtiens aussi le ?.
Que retourne
file le_fichier_de_donnees
Hors ligne
#9 Le 12/02/2020, à 21:53
- ColdDuke
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
C'est possible que certaines propriete du fichier soit du windows (je travaillais dessus a l'origine)
file ../Reference/protein_isoform.txt
../Reference/protein_isoform.txt: ASCII text, with CRLF line terminators
Dernière modification par ColdDuke (Le 12/02/2020, à 21:55)
Hors ligne
#10 Le 12/02/2020, à 22:03
- pingouinux
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
with CRLF line terminators
C'est bien un fichier de type Windows
Tu peux tester la commande de Watael en #5 en remplaçant gawk par awk
Hors ligne
#11 Le 12/02/2020, à 22:08
- ColdDuke
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
La commande de Watael fonctionne bien mais j'ai toujours mon ?
Hors ligne
#12 Le 12/02/2020, à 22:38
- ColdDuke
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
C'est bon j'ai reussi !
J'ai applique cette commande a mon fichier de donne pour retirer les \r
tr -d '\r' <protein_isoform.txt >protein_iso
ce qui m'a donne un fichier de ce type
file protein_iso
protein_iso: ASCII text
puis j'ai applique la commande de Watael en remplacant gawk par awk et j'ai tout les fichier avec le bon nom.
Merci beaucoup ! Je vais essayer de comprendre le fonctionnement de awk, ca a l'air puissant.
Hors ligne
#13 Le 13/02/2020, à 11:27
- pingouinux
Re : Copier parties d`un fichier texte dans des fichier texte avec un nom
Remarques :
- Pour convertir les fichiers, tu peux aussi regarder la commande dos2unix.
- Pour voir les caractères bizarres dans les noms de fichiers (ici \r)
ls -b
Hors ligne