Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

Aghedor #6 a écrit :

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