Script Shell pour extraire des séquences de deux fichiers

Fermé
NAGARA.Majdi Messages postés 10 Date d'inscription mercredi 15 juillet 2015 Statut Membre Dernière intervention 16 juillet 2015 - 15 juil. 2015 à 10:33
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 16 juil. 2015 à 16:33
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 15/07/2015 à 11:45
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 mercredi 15 juillet 2015 Statut Membre Dernière intervention 16 juillet 2015
Modifié par NAGARA.Majdi le 15/07/2015 à 12:02
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
15 juil. 2015 à 15:58
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 mercredi 15 juillet 2015 Statut Membre Dernière intervention 16 juillet 2015 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
15 juil. 2015 à 16:11
ça marche pas.
Aucun résultat :(
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 15/07/2015 à 16:33
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 mercredi 15 juillet 2015 Statut Membre Dernière intervention 16 juillet 2015 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
Modifié par NAGARA.Majdi le 15/07/2015 à 17:19
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
15 juil. 2015 à 11:30
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 mercredi 15 juillet 2015 Statut Membre Dernière intervention 16 juillet 2015
15 juil. 2015 à 12:05
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