Problème argument pour grep et boucle for

Résolu/Fermé
ONI - 30 mars 2012 à 12:02
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 27 avril 2012 à 15:36
Bonjour,
Je travaille sous unix (plus précisément sur le terminal sur un mac) pour modifier des fichiers texte contenant des données issues de GenBank (des données de séquençage ADN... enfin peu importe).
Mon problème est le suivant :
- j'ai un fichier texte de la forme :

>GENRE1espèces1|(plein d'infos pas utiles)|co1(nom du gène)
acgtcgcgatcgagagatctctagagctctgagatcgagct
acgatatatgcgcgacgatagatatcggatcg
......
>GENRE1espèces2|(plein d'infos pas utiles)|co1
......
>GENRE2espèces1|(plein d'infos pas utiles)|co1
......


Le saut de ligne est le même dans le fichier. (je vous ai évité le nom de genre et d'espèce des bestioles pour un souci de clarté)

Et j'aimerais créer un fichiers (à partir de celui-la) pour chaque GENRE répertoriant toutes les séquences (acgtgtg...) appartenant à ce genre et donc obtenir plusieurs fichiers du type :

GENRE1
séquences1-acgtgagtgc
séquences2-accggggtgtgt
........

Et dernière chose j'aimerais ajouter une même dernière ligne à tous ces fichiers, cette ligne, contenu dans un fichier (donc avec une seule ligne), étant une séquence de référence pour le genre.

Étant débutant en programmation shell unix, je pense qu'il faudrait utiliser une voir plusieurs boucles for ainsi que des grep à tout va mais c'est dans l'argumentation propre des lignes de commandes que je bute.

J'espère avoir été assez clair, merci d'avance de vous prendre la tête avec moi ;).
A voir également:

41 réponses

Nikel, intervention parfaite ^^. J'ai opté pour la première solution et j'ai juste changé le e=e en e=">" e pour garder le > devant les noms

Je te remercie beaucoup, et ta vitesse de réponse est impressionnante ^^.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
27 avril 2012 à 15:36
j'avais gardé tout les fichiers et une rapide recherche dans history et hop
tu peux enlever if(n && (x[n]<2))close(n) ; c'était pour des test avec close.
pour revenir au problème du nombre de fichiers ouverts, cette commande devrait indiquer le nombre max. :
cd /tmp ; seq -w 1 2048 | awk  '{print  $1 > $1}'
0