Script Shell pour extraire des séquences de deux fichiers

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. Contributeur
    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. 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. Contributeur
      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. @dubcekça marche pas.
      Aucun résultat :(
      0
    4. Contributeur
      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. @dubcekMerci 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. 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. 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