Script Shell pour extraire des séquences de deux fichiers

NAGARA.Majdi Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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
A voir également:

2 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
NAGARA.Majdi Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
essayer
awk -F "[>|]" 'NR==FNR {t1[$1]=t2[$2]=1; next} /^>/ {t1[$2] && t2[$3]? n=1: n=0} n {print}'  A B
0
NAGARA.Majdi Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   > dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
ça marche pas.
Aucun résultat :(
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
NAGARA.Majdi Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   > dubcek Messages postés 18789 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
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
NAGARA.Majdi Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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