Script Shell pour extraire des séquences de deux fichiers

NAGARA.Majdi Messages postés 10 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour tous le monde,
je suis débutant en programmation, est ce que quelqu'un peut m'aider?
J'ai deux fichier A et B, dans le fichier A j'ai seulement les nom des séquences, et dans le fichier B, j'ai les séquences en dessous de chaque nom. J'ai besoin d'extraire les séquences spécifiques du fichier B pour chaque nom que j'ai dans la liste A.
Exemple:
Fichier A:
c307770_g1_i1|m.4218128
c309640_g2_i2|m.4493433
c309640_g2_i3|m.4493459
c301579_g1_i3|m.3469236
c307770_g1_i2|m.4218177

Fichier B:

>c100000_g1_i1|m.378963 c100000_g1_i1|g.378963 ORF c100000_g1_i1|g.378963 c100000_g1_i1|m.378963 type:internal len:139 (+) c100000_g1_i1:2-415(+)
GAAACCACACGCCTTTTGGAGAAACTTAATGTAGTTTTAAAAGGAGATGACAAAGACAAA
GATGGCAAAAACCTTCTCAAAGTAGTTATGAGGACATGGCTGCCTGCTGGAGATGCCTTG
CTTCAGATGATTGCAATCCATCTTCCTTCCCCTGTGACAGCTCAGAAATGCAGGATGGAG
TTGCTGTATGAAGGTCCACATGATGATGAAGCTGCTGTTGCAATCAAGAACTGTGATCCC
AATGGTCACTTAATGATGTACATCTCAAAAATGGTCCCCACATCAGATAAAGGACGTTTC
TATGCATTTGGTCGTGTCTTTTCTGGAACTGTCTCTTCAGGACAGAAAGTTAGAATTATG
GGACCCAATTACACTCCTGGCAAGAAGGAAGACTTAGCTGAAAAAGCCATTCAG
>c100011_g1_i1|m.378997 c100011_g1_i1|g.378997 ORF c100011_g1_i1|g.378997 c100011_g1_i1|m.378997 type:complete len:22 (+) c100011_g1_i1:290-355(+)
ATGACTCTAACAAAGAGGGAGAACGAAATGGGTTCAATTGTGGCCACGGTGCTCGCATTT
>c307770_g1_i1|m.4218128 c307770_g1_i1|g.4218128 ORF c307770_g1_i1|g.4218128 c307770_g1_i1|m.4218128 type:complete len:1548 (+) c307770_g1_i1:34-4677(+)
ATGAGGGTTCTTTGGTTATCCTTGTTTGTCGTGGCCGCCTCTGGCTTTGAGGTCGGCAAG
GAGTACGTGTATAAGTACAAAGGAACACTTCACGTCGCCAACCCTGAGCAGCCCCTCCAG
GACGGTCATGAAACACAAAAACATACATGCACGGTGGAACAAGTGATCGAGGACAGTGTC
AGTAACATGTTACGTGATGTGTTGCTGTCCTTGATCACTTGTGCTGTGTGTGTGTCTCAC
TTTCATTCTGTACCTGCTTTGTCTATCCTTCAGCACATACCTGCTGGTGCTGGCATTCTT

Résultat attendu pour le premier code: "c307770_g1_i1|m.4218128"
>c307770_g1_i1|m.4218128 c307770_g1_i1|g.4218128 ORF c307770_g1_i1|g.4218128 c307770_g1_i1|m.4218128 type:complete len:1548 (+) c307770_g1_i1:34-4677(+)
ATGAGGGTTCTTTGGTTATCCTTGTTTGTCGTGGCCGCCTCTGGCTTTGAGGTCGGCAAG
GAGTACGTGTATAAGTACAAAGGAACACTTCACGTCGCCAACCCTGAGCAGCCCCTCCAG
GACGGTCATGAAACACAAAAACATACATGCACGGTGGAACAAGTGATCGAGGACAGTGTC
AGTAACATGTTACGTGATGTGTTGCTGTCCTTGATCACTTGTGCTGTGTGTGTGTCTCAC
TTTCATTCTGTACCTGCTTTGTCTATCCTTCAGCACATACCTGCTGGTGCTGGCATTCTT

Merci beaucoup pour votre aide

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    essayer
    $ awk -F "[>|]" 'NR==FNR {t[$1]=1; next} /^>/ {t[$2]? n=1: n=0} n {print}' fichierA fichierB
    >c307770_g1_i1|m.4218128 c307770_g1_i1|g.4218128 ORF c307770_g1_i1|g.4218128 c307770_g1_i1|m.4218128 type:complete len:1548 (+) c307770_g1_i1:34-4677(+)
    ATGAGGGTTCTTTGGTTATCCTTGTTTGTCGTGGCCGCCTCTGGCTTTGAGGTCGGCAAG
    GAGTACGTGTATAAGTACAAAGGAACACTTCACGTCGCCAACCCTGAGCAGCCCCTCCAG
    GACGGTCATGAAACACAAAAACATACATGCACGGTGGAACAAGTGATCGAGGACAGTGTC
    AGTAACATGTTACGTGATGTGTTGCTGTCCTTGATCACTTGTGCTGTGTGTGTGTCTCAC
    TTTCATTCTGTACCTGCTTTGTCTATCCTTCAGCACATACCTGCTGGTGCTGGCATTCTT
    2
    1. NAGARA.Majdi Messages postés 10 Statut Membre
       
      Merci beaucoup,
      c'est vrai que le script awk Marche très bien mais j'ai un autre problème, c'est que le fichier B contient plus de nom que ce rassemble

      Par exemple
      Dans le fichier A on a : ce code >c106804_g1_i1|m.401123

      Dans le fichier B il y a 2 codes qui commence par ">c106804_g1_i1" mais il faut tenir compte de deuxième code après la Bare "|" où il y a le "m.401123" ,qui est le bon code à chercher, et le code m.401126

      >c106804_g1_i1|g.401123 ORF c106804_g1_i1|g.401123 c106804_g1_i1|m.401123 type:5prime_partial len:81 (+) c106804_g1_i1:3-245(+)

      >c106804_g1_i1|m.401126 c106804_g1_i1|g.401126 ORF c106804_g1_i1|g.401126 c106804_g1_i1|m.401126 type:3prime_partial len:41 (+) c106804_g1_i1:273-392(+)

      Merci beaucoup pour votre aide,
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      essayer
      awk -F "[>|]" 'NR==FNR {t1[$1]=t2[$2]=1; next} /^>/ {t1[$2] && t2[$3]? n=1: n=0} n {print}'  A B
      0
    3. NAGARA.Majdi Messages postés 10 Statut Membre > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
       
      ça marche pas.
      Aucun résultat :(
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      essayer avec { (t1[$2] && t2[$3]) ?
      fournis des données pour tester

      edit: il y a des espaces dans fichierB, essayer
      awk -F "[>| ]" 'NR==FNR {t1[$1]=t2[$2]=1; next} /^>/ {t1[$2] && t2[$3]? n=1: n=0} n {print}' A B
      0
    5. NAGARA.Majdi Messages postés 10 Statut Membre > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Merci pour votre aide, ci-dessous plus de détails sur les deux fichiers et les résultats attendus.
      Merci

      Fichier A:
      c304604_g1_i3|m.3804528
      c214206_g1_i3|m.929275
      c295996_g1_i1|m.2944353

      Fichier B:
      >c304604_g1_i3|m.3804529 c304604_g1_i3|g.3804529 ORF c304604_g1_i3|g.3804529 c304604_g1_i3|m.3804529 type:complete len:349 (-) c304604_g1_i3:938-1984(-)
      ATGCCCATTCCGCCCATGCCTCCCATGCCGCCCATTCCTCCCATGCCACCCATGGCATCA
      GCCTTGTCCTCCTTCGGAAGCTCTACAACAACTGCCTCGGCTGTCGTCAGGAGGGAAGCT
      >c304604_g1_i3|m.3804528 c304604_g1_i3|g.3804528 ORF c304604_g1_i3|g.3804528 c304604_g1_i3|m.3804528 type:complete len:573 (+) c304604_g1_i3:270-1988(+)
      ATGTACCGCCTGTGCCGTGTCGTGCCACACATGCGTGGGGCCCTGGGTCAAAGCCTGCGG
      CGCCACTATGCCAAGGACATCCGCTTTGGGCCCGACGTGCGTGCCCTCATGCTCCAGGGG
      ATTGAGCTCAAGGACCGCTTCCAGAATGTGGGGGCCAAGCTGGTTCAGGACGTGGCCAAC
      >c304604_g1_i1|m.3804502 c304604_g1_i1|g.3804502 ORF c304604_g1_i1|g.3804502 c304604_g1_i1|m.3804502 type:complete len:377 (+) c304604_g1_i1:40-1170(+)
      ATGGTGCAGGACGGCAAGACACTGAATGACGAACTGGAGGTGATTGAGGGGATGAAGTTT
      GACCGTGGCTACATCTCGCCCTACTTCATCAACACGAGCAAGGGGGCCAAGGTGGAGTTCCAGGGTGAAGCACTGAGCACCCTAGTGCTGAACAGGTTGAAGGTAGGCCTCCAGGTGGCAGCA
      GTGAAGGCTCCTGGTTTTGGGGACAACCGCAAGGCGACGCTCCAGGACATGGCCGTGGCC
      >c304382_g1_i3|m.3778592 c304382_g1_i3|g.3778592 ORF c304382_g1_i3|g.3778592 c304382_g1_i3|m.3778592 type:5prime_partial len:1087 (+) c304382_g1_i3:3-3263(+)
      AACAAATGGTCTCGCAACACCTTTCCACACAATTTCGTATTGCCAATGTTAAAAACGGCA
      GCCGCAGGGCGTCGCGGCGATCAAATCAAAATGGCCACGTGCGACCGGAGGAGAGCTATG
      CTCAGGCTCGTAGTGCTCTTCGTCGTGCTCGGACACGTCTCACTGGTCGACAGGTCGAAC
      >c214206_g1_i3|m.929275 c214206_g1_i3|g.929275 ORF c214206_g1_i3|g.929275 c214206_g1_i3|m.929275 type:complete len:289 (-) c214206_g1_i3:302-1168(-)
      ATGCACAAAGTGTCGTTGTTCCTCACAGCAGCGCTCTTATGCGCTGCTGTAGCCTTTGCG
      AAGAAAGACAGTGACTCTTCGAAAGACAAAGAGAGCGTTGGAACGGTCATAGGCATTGAT
      TTGGGAACGACGTATTCCTGTGTTGGCGTCTTCAAAAATGGGCGAGTGGAAATTATTGCG
      >c295996_g1_i1|m.2944353 c295996_g1_i1|g.2944353 ORF c295996_g1_i1|g.2944353 c295996_g1_i1|m.2944353 type:complete len:648 (+) c295996_g1_i1:413-2356(+)
      ATGGCGAAGGTGCCCGCTATTGGTATTGATCTTGGAACGACCTATTCCTGCGTTGGAGTC
      TTCCAACACGGGAAGGTCGAAATCATCGCCAACGACCAAGGAAATCGTACCACGCCGAGC
      TATGTCGCGTTCACGGACACGGAGCGACTCATTGGAGATGCTGCGAAGAACCAAGTGGCA


      Résultat:
      >c304604_g1_i3|m.3804528 c304604_g1_i3|g.3804528 ORF c304604_g1_i3|g.3804528 c304604_g1_i3|m.3804528 type:complete len:573 (+) c304604_g1_i3:270-1988(+)
      ATGTACCGCCTGTGCCGTGTCGTGCCACACATGCGTGGGGCCCTGGGTCAAAGCCTGCGG
      CGCCACTATGCCAAGGACATCCGCTTTGGGCCCGACGTGCGTGCCCTCATGCTCCAGGGG
      ATTGAGCTCAAGGACCGCTTCCAGAATGTGGGGGCCAAGCTGGTTCAGGACGTGGCCAAC
      >c214206_g1_i3|m.929275 c214206_g1_i3|g.929275 ORF c214206_g1_i3|g.929275 c214206_g1_i3|m.929275 type:complete len:289 (-) c214206_g1_i3:302-1168(-)
      ATGCACAAAGTGTCGTTGTTCCTCACAGCAGCGCTCTTATGCGCTGCTGTAGCCTTTGCG
      AAGAAAGACAGTGACTCTTCGAAAGACAAAGAGAGCGTTGGAACGGTCATAGGCATTGAT
      TTGGGAACGACGTATTCCTGTGTTGGCGTCTTCAAAAATGGGCGAGTGGAAATTATTGCG
      >c295996_g1_i1|m.2944353 c295996_g1_i1|g.2944353 ORF c295996_g1_i1|g.2944353 c295996_g1_i1|m.2944353 type:complete len:648 (+) c295996_g1_i1:413-2356(+)
      ATGGCGAAGGTGCCCGCTATTGGTATTGATCTTGGAACGACCTATTCCTGCGTTGGAGTC
      TTCCAACACGGGAAGGTCGAAATCATCGCCAACGACCAAGGAAATCGTACCACGCCGAGC
      TATGTCGCGTTCACGGACACGGAGCGACTCATTGGAGATGCTGCGAAGAACCAAGTGGCA
      0
  2. Utilisateur anonyme
     
    salut,

    ça dépend de ta spécialisation.
    vu la tronche du fichier, je te recommande de t'initier à
    perl
    (que je ne connais pas), qui pourra lire les deux fichiers et faire le traitement souhaité,
    mais c'est tout à fait réalisable, simplement, avec
    sed
    , en utilisant des intervalles (cf.
    man sed
    ), dans une boucle shell
    while
    pour lire le premier fichier.
    0
    1. NAGARA.Majdi Messages postés 10 Statut Membre
       
      Merci beaucoup,
      Oui effectivement je suis entrain d'apprendre le langage de programmation perl et shell.
      Est ce que vous avez des toto qui peuvent m'aider.
      Merci
      0