Partage
  • Partager sur Facebook
  • Partager sur Twitter

[bash] Avis sur un script

Besoin d'un avis sur la "propreté" de mon script avant de le soumettre

Sujet résolu
    30 octobre 2019 à 19:17:56

    Bonjour à tous !

    Actuellement étudiant en cours de Bio-Informatique, notre prof nous invite à nous auto-former sur différent langage (on aborde le Python uniquement en cours pour l'instant).

    Dans le cadre d'un projet d'annotation, j'ai du à partir d'une séquence d'ADN trouvé les zones codantes pour des protéines. Pour faciliter la suite de mon annotation, je doit extraire chacune de ces zones de mon fichier.

    Je pensais donc réalisé un petit script en bash me permettant de réaliser ce découpage. Les résultats sont là, mais avant de le soumettre dans mon rapport de projet, j'aurai aimé savoir s'il y avait des erreurs grossières dans la rédaction de celui-ci. Mon fichier initial est un fichier au format FASTA qui se présente comme ceci :

    >nom_de_ma_sequence
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
    DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
    ...

    Mon script doit donc me permettre de :

    • supprimer la première ligne
    • supprimer les retours à la ligne
    • extraire ma zone allant de la position START à STOP.
    Voici le script en question :
    #!/bin/bash
    
    # Linéarisation de la séquence:
    read name_seq < $1
    tr -d $name_seq < $1 > $1.nohead
    tr -d '\n' < $1.nohead > $1.linear
    
    # Découpage selon cartographie génique:
    read -p "Combien y a t'il de CDS ? " nb_CDS
    nb_CDS=`expr $nb_CDS + 1`
    cptr=1
    while [ $cptr != $nb_CDS ]
    do
           read -p "Codons START de CDS_$cptr " start
           read -p "Codons STOP de CDS_$cptr " stop
           cut -c $start-$stop $1.linear > CDS_$cptr
           cptr=` expr $cptr + 1`
    done
    
    # Fusion des CDS en un seul fichier:
    more CDS_* > $1_CDS;
    
    # Nettoyage des fichiers intermédiaires:
    read -p "Voulez-vous supprimer les fichiers intermédiaire ? O/N " supCDS
    echo $supCDS
    case $supCDS in
                 "O")
                     rm CDS_*
                     rm $1.*
                     ;;
                 "o")
                     rm CDS_*
                     rm $1.*
                     ;;
    esac
    

    je l’exécute en console en réalisant ./mon_script   mon_fichier_fasta.

    Des commentaires ?

    EDIT : j'ai ajouté un contrôle que la séquence est bien entrée en argument en amont du script :

    # Verification que la séquence est renseignée:
    if [ -z $1 ]
    then
        echo "Il faut entrer une séquence en parametre : ./decoupage_CDS ma_sequence"
        exit
    fi

    -
    Edité par GG-31 30 octobre 2019 à 19:36:06

    • Partager sur Facebook
    • Partager sur Twitter
      30 octobre 2019 à 20:04:05

      salut,

      supprimer la première ligne supprimer les retours à la ligne extraire ma zone allant de la position START à STOP.

      ça se fait avec sed.

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        31 octobre 2019 à 1:00:28

        dantonq a écrit:

        ça se fait avec sed.

        J'ai cherché pas mal de lecture sur sed, et j'ai pas trouvé comment supprimer le retour à la ligne ou extraire une partie de ma ligne en me basant sur les positions des caractères dans la ligne et non pas sur des mots.

        Quand je saisie mon START et mon STOP, c'est les positions dans la séquence. Par exemple :

        ORF_1   1   207

        ORF_2   307   669

        ...

        Du coup je voudrais extraire un "bout" de ma ligne qui fait 7500 caractères correspondant au fragment entre les positions 1 et 207 (avec 207 exclue).

        • Partager sur Facebook
        • Partager sur Twitter
          31 octobre 2019 à 3:49:32

          $ start=30
          $ length=35
          $ echo '>nom_de_ma_sequence
          AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
          BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
          DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' \
             | sed -rn '1d; :a;$!{N;ba;};s/\n//g; s/^.{'$start'}(.{,'$length'}).*/\1/p'
          AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

          -
          Edité par dantonq 31 octobre 2019 à 3:50:51

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          [bash] Avis sur un script

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown