IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

script bash - modifications d'attributs [Débutant(e)]


Sujet :

Linux

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut script bash - modifications d'attributs
    Bonjour à tous,

    Je viens vous demander de l'aide car j'ai besoin d'écrire un petit script en bash et je n'y connais rien !
    Je suis statisticienne, je fais de la bio-informatique et je me sers de l'informatique afin de faire des études statistiques... Donc le bash ne m'a pas été très utile jusqu'ici...

    Je vais sans doute être amenée à m'en servir davantage donc j'aimerais commencer à m'initer. Là j'en ai besoin pour modifier un fichier : s_garma-296_converted.sam qui se définit ainsi :

    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
     
    more '/data/patient1/s_garma-296_converted.sam' 
    @PG	ID:illumina_export2sam.pl	VN:2.0.0	CL:/usr/local/bin/illumina_export2sam.pl --read1=s_garma-296_1_export.txt --read2=s_garma-29
    6_2_export.txt
    HWI-ST584_81:4:1101:1176:2055	73	c18.fa	42449052	28	76M	*	0	0	NGAAATCTCACATTTGCCTTCTGCGATCCCACTTCTGTAGCTCT
    CATCCAGGCTATGGTAAGTCCATTGCTGGTCA	############################################################################	BC:Z:TTAGGC	XD:Z:A75	SM:i:28	AS:i:0
    HWI-ST584_81:4:1101:1176:2055	133	*	0	0	*	c18.fa	42449052	0	TGAAATCCTTTGAGGTCNNNNNNNNNNNNGTCACTGGCTGTGAG
    GAGCTGCAAAAGAATAAAGAAATTTTCTCAGN	@@@FFFFFFHHHDHIFG###########################################################	BC:Z:TTAGGC
    HWI-ST584_81:4:1101:1150:2056	73	c14.fa	95921912	28	76M	*	0	0	NCGCAGCTTCTCCAGAACTTTCCTCATCTCTTCCAGTTCTCCGG
    TGATCTTCTCTGCACCCAAAGGAGAGGTGTTC	############################################################################	BC:Z:TTAGGC	XD:Z:G75	SM:i:28	AS:i:0
    HWI-ST584_81:4:1101:1150:2056	133	*	0	0	*	c14.fa	95921912	0	CTACCCTCTTCAGGACANNNNNNNNNNNNTTCCCAGGGGCGAGG
    AGTCTCTGGAGACGCTGGAGGAGCAGTCTGCN	@C@FF?DDHHDFDHHI?###########################################################	BC:Z:TTAGGC
    HWI-ST584_81:4:1101:1235:2071	89	c1.fa	66031393	254	76M	*	0	0	AGTTAGGAATTCTCATACATGCTTATGATTAAAAATGCAAACCA
    TAGTATAGGTGTATCAGTGTGAAAACGAAAAC	=GJGIJJIJJJJJJJIJJJJJIIJJJIHIHJJJJJJJJIHFJIJJJJJJJJJJIJJJJJJJJJHHHHHDFEFFCBB	BC:Z:TTAGGC	XD:Z:76	SM:i
    :359	AS:i:0
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    more '/data/patient1/s_garma-296_converted.sam' 
    @PG	ID:illumina_export2sam.pl	VN:2.0.0	CL:/usr/local/bin/illumina_export2sam.pl --read1=s_garma-296_1_export.txt --read2=s_garma-29
    6_2_export.txt
    HWI-ST584_81:4:1101:1176:2055	73	chr18	42449052	28	76M	*	0	0	NGAAATCTCACATTTGCCTTCTGCGATCCCACTTCTGTAGCTCT
    CATCCAGGCTATGGTAAGTCCATTGCTGGTCA	############################################################################	BC:Z:TTAGGC	XD:Z:A75	SM:i:28	AS:i:0
    HWI-ST584_81:4:1101:1176:2055	133	*	0	0	*	chr18	42449052	0	TGAAATCCTTTGAGGTCNNNNNNNNNNNNGTCACTGGCTGTGAG
    GAGCTGCAAAAGAATAAAGAAATTTTCTCAGN	@@@FFFFFFHHHDHIFG###########################################################	BC:Z:TTAGGC
    Je dois juste remplacer tous les c1.fa en chr1, ci.fa en chri.
    D'habitude, je fais les modifications dans les fichiers avec R mais je ne peux pas ouvrir ce type de fichier avec R...

    Je n'ai pas de début de proposition de code à vous proposer
    J'ai commencé à regarder des tutos sur bash car j'aimerais dans un premier temps arriver à afficher par exemple chaque ligne d'un fichier ou la première valeur (colonne) de chaque ligne.

    Enfin, je remarque que j'aurai une difficulté : dans les 2 premières lignes par exemple, les "c18.fa" ne sont pas placés dans les mêmes colonnes...

    Merci à ceux qui pourront me donner des pistes pour régler mon problème,
    Jane

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    ce serait un peu lourd pour du bash.

    tu peux utiliser sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.sauvegarde 's/old/new/g' tonFichier
    dans ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.bak 's/c1\.fa/chr1/g; s/ci\.fa/chri/g' s_garma-296_converted.sam
    la partie de gauche est une expression rationnelle (regex), c'est pourquoi le point est protégé par un anti-slash.
    je te laisse regarder le man de sed pour voir exactement ce que font -i, s, et g.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    Merci beaucoup pour cette réponse Je suis en train de regarder le man de sed.
    Quand je disais devoir changer c1.fa en chr1, ci.fa en chri, je voulais dire c1.fa en chr1, c2.fa en chr2, c3.fa en chr3, c4.fa en chr4,.... c22.fa en chr22, cX.fa en chrX, cY.fa en chrY et cMt en chrMt...
    Est-ce que je peux faire une boucle ?

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    alors il faut retenir l'élément qui change (ce qui est après "c", et avant le point) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.bak ''s/c\([^.]*\)\.fa/chr\1/g' s_garma-296_converted.sam
    ce que font les parenthèses protégées dans la partie gauche, et ce qui est restitué par le \1 dans la partie droite.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    Super, c'est parfait ! Mon fichier est utilisable à présent

    J'ai deux petites questions :
    1) A quoi sert le fichier de sauvegarde .bak ?
    2) Concernant l'option g,
    g Copier l'espace intermédiaire à l'espace de travail.
    qu'est-ce que ça fait concrètement ? C'est quoi l'espace intermédiaire ?

    Autre question : je vais certainement avoir besoin de faire ce genre de modifications souvent dans des fichiers qu'on ne peut pas vraiment ouvrir. J'ai l'impression que la commande sed permet de faire quasiment toutes les modifications possibles (en tout cas nécessaires à mon niveau) dans un fichier. En gros, je n'aurai pas besoin d'apprendre le bash, l'utilisation de sed pourrait palier tous mes besoins...
    Pour la manipulation de fichiers, est-ce que le bash et sed permettent des choses équivalentes ?

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Pour la manipulation de fichiers, est-ce que le bash et sed permettent des choses équivalentes ?
    oui, mais bash est beaucoup plus lent, la différence est d'autant plus sensible que le fichier est volumineux.

    ce n'est pas le bon 'g' et je ne le trouve pas sur la page man.
    celui qui est utilisé ici est un paramètre de 's' pour généraliser les substitutions sur une même ligne.
    sans ce paramètre, seule la première occurrence serait substituée.

    le fichier .bak c'est comme toute sauvegarde: au cas où...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    oui, mais bash est beaucoup plus lent, la différence est d'autant plus sensible que le fichier est volumineux.
    Ok ! Heureusement que j'ai utilisé sed, car cette commande m'a déjà pris plus d'une demi-heure, mon fichier faisant 25 Go

    Citation Envoyé par N_BaH Voir le message
    ce n'est pas le bon 'g' et je ne le trouve pas sur la page man.
    celui qui est utilisé ici est un paramètre de 's' pour généraliser les substitutions sur une même ligne.
    sans ce paramètre, seule la première occurrence serait substituée.

    le fichier .bak c'est comme toute sauvegarde: au cas où...
    Ok, je vois.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38
  2. Script bash : Pb avec sed
    Par fred64 dans le forum Linux
    Réponses: 3
    Dernier message: 19/08/2005, 11h24
  3. Scripts bash : requêtes sql
    Par milka dans le forum Linux
    Réponses: 3
    Dernier message: 17/08/2005, 10h59
  4. Modif des attributs d'une balise <param> en javascript
    Par Henri dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/08/2005, 22h20
  5. Problème script Bash
    Par Sphost dans le forum Linux
    Réponses: 10
    Dernier message: 26/07/2005, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo