Awk help
Résolu
new_26
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
new_26 Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
new_26 Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
si quelqu'un a un peu de temps pour m'aider...
je cherche depuis 2 jours une solution!!!
voilà, j'ai un fichier du genre:
gene_1
gene_2
gene_3
gene_4
fa_alignement1
gene_5
gene_6
fa_alignement2
gene_7
...
le fa_alignement1 est une information concernant le gene_4, idem pour le fa_alignement2 avec le gene_6
voilà ce que je voudrai faire:
pour chaque gene possédant un fa_alignement, je voudrai le sortir, c'est à dire avoir un fichier de sortie du genre:
gene_4 fa_alignement1
gene_6 fa_alignement2
j'imagine qu'on peut faire ça avec awk mais je n'y arrive pas!
je vous remercie par avance,
une débutante!
si quelqu'un a un peu de temps pour m'aider...
je cherche depuis 2 jours une solution!!!
voilà, j'ai un fichier du genre:
gene_1
gene_2
gene_3
gene_4
fa_alignement1
gene_5
gene_6
fa_alignement2
gene_7
...
le fa_alignement1 est une information concernant le gene_4, idem pour le fa_alignement2 avec le gene_6
voilà ce que je voudrai faire:
pour chaque gene possédant un fa_alignement, je voudrai le sortir, c'est à dire avoir un fichier de sortie du genre:
gene_4 fa_alignement1
gene_6 fa_alignement2
j'imagine qu'on peut faire ça avec awk mais je n'y arrive pas!
je vous remercie par avance,
une débutante!
4 réponses
Salut,
Une solution avec sed :
Zen my nuggets ;-)
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot. <('')
Une solution avec sed :
$ cat plop
gene_1
gene_2
gene_3
gene_4
fa_alignement1
gene_5
gene_6
fa_alignement2
gene_7
...
$ sed -n 'N;/\nfa_alignement/!{D};s/\n/ /p' plop
gene_4 fa_alignement1
gene_6 fa_alignement2
Zen my nuggets ;-)
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot. <('')
merci zipe31,
pourriez-vous détailler les expressions s'il vous plaît?
ça ne fonctionne pas mais je soupçonne que c'est parce que la ligne contenant fa_alignement ne commence pas par fa_alignement.
fa_alignement se trouve dans la colonne 9 des lignes suivant gene_4 et gene_7.
De plus, plusieurs lignes comportant fa_alignement peuvent se suivre après gene_4 et j'aimerai toutes les garder.
Désolée de ne pas avoir été assez précise!
pourriez-vous détailler les expressions s'il vous plaît?
ça ne fonctionne pas mais je soupçonne que c'est parce que la ligne contenant fa_alignement ne commence pas par fa_alignement.
fa_alignement se trouve dans la colonne 9 des lignes suivant gene_4 et gene_7.
De plus, plusieurs lignes comportant fa_alignement peuvent se suivre après gene_4 et j'aimerai toutes les garder.
Désolée de ne pas avoir été assez précise!
hello
avec awk et les données fournies
avec awk et les données fournies
$ awk '{t[NR]=$0} /fa_alignement/ {print t[NR-1], $0}' fichier
gene_4 fa_alignement1
gene_6 fa_alignement2
Re-
Tant que tu ne nous donneras pas des exemples CONCRETS et EXACTS, ne ne pourrons te donner que des solutions approximatives ;-(
En partant de tes dernières infos...
Si ça colle, j'expliquerais la syntaxe, sinon faudra nous donner de meilleurs exemples ;-(
Tant que tu ne nous donneras pas des exemples CONCRETS et EXACTS, ne ne pourrons te donner que des solutions approximatives ;-(
En partant de tes dernières infos...
$ cat plop
gene_1
gene_2
gene_3
gene_4
bla bla fa_alignement1 blabla
gene_5
gene_6
bla fa_alignement2 blabla
gene_7
gene_8
gene_9
gene_10
gene_11
bla bla fa_alignement3 blabla
bla fa_alignement3a blabla
bla bla fa_alignement3b blabla
gene_12
gene_13
bla fa_alignement4 blabla
bla bla fa_alignement4a blabla
gene_14
$ sed -n 'N;/\n.*fa_alignement/!{D};:z;s/\n/ /;N;/\n.*fa_alignement/bz;P;D' plop
gene_4 bla bla fa_alignement1 blabla
gene_6 bla fa_alignement2 blabla
gene_11 bla bla fa_alignement3 blabla bla fa_alignement3a blabla bla bla fa_alignement3b blabla
gene_13 bla fa_alignement4 blabla bla bla fa_alignement4a blabla
Si ça colle, j'expliquerais la syntaxe, sinon faudra nous donner de meilleurs exemples ;-(
bonjour,
merci mais non ça ne fonctionne pas :/
voici la tête de mon fichier:
Query: gene_1|GeneMark.hmm|491_aa|+|1|1476 [L=491]
Query: gene_2|GeneMark.hmm|399_aa|+|2169|3368 [L=399]
Query: gene_3|GeneMark.hmm|297_aa|+|3419|4312 [L=297]
Query: gene_4|GeneMark.hmm|401_aa|+|4275|5480 [L=401]
Query: gene_5|GeneMark.hmm|183_aa|+|5473|6024 [L=183]
Query: gene_6|GeneMark.hmm|675_aa|+|6249|8276 [L=675]
Query: gene_7|GeneMark.hmm|403_aa|+|8409|9620 [L=403]
4.6e-06 16.6 0.3 2.5e-05 14.3 0.1 2.3 2 fa_alignment_TIGR03930
Query: gene_8|GeneMark.hmm|75_aa|+|9620|9847 [L=75]
Query: gene_9|GeneMark.hmm|94_aa|+|10152|10436 [L=94]
Query: gene_10|GeneMark.hmm|404_aa|-|10485|11699 [L=404]
Query: gene_11|GeneMark.hmm|130_aa|-|11717|12109 [L=130]
Query: gene_12|GeneMark.hmm|172_aa|-|12325|12843 [L=172]
Query: gene_13|GeneMark.hmm|34_aa|-|12884|12988 [L=34]
Query: gene_20|GeneMark.hmm|844_aa|+|18374|20908 [L=844]
Query: gene_21|GeneMark.hmm|297_aa|+|20967|21860 [L=297]
Query: gene_22|GeneMark.hmm|423_aa|-|22158|23429 [L=423]
Query: gene_23|GeneMark.hmm|305_aa|+|23501|24418 [L=305]
Query: gene_24|GeneMark.hmm|134_aa|-|24439|24843 [L=134]
Query: gene_25|GeneMark.hmm|197_aa|+|24946|25539 [L=197]
Query: gene_26|GeneMark.hmm|252_aa|+|25651|26409 [L=252]
Query: gene_27|GeneMark.hmm|299_aa|-|26466|27365 [L=299]
Query: gene_1887|GeneMark.hmm|183_aa|+|1884131|1884682 [L=183]
1.2e-05 15.4 1.6 1.9e-05 14.7 1.6 1.3 1 fa_alignment_TIGR03931
Query: gene_1888|GeneMark.hmm|141_aa|+|1884774|1885199 [L=141]
Query: gene_1889|GeneMark.hmm|153_aa|+|1885231|1885692 [L=153]
Query: gene_1890|GeneMark.hmm|147_aa|+|1885923|1886366 [L=147]
Query: gene_1891|GeneMark.hmm|400_aa|+|1886592|1887794 [L=400]
Query: gene_1892|GeneMark.hmm|114_aa|-|1887842|1888186 [L=114]
Query: gene_1893|GeneMark.hmm|246_aa|+|1888779|1889519 [L=246]
Query: gene_1894|GeneMark.hmm|380_aa|+|1889651|1890793 [L=380]
Query: gene_1895|GeneMark.hmm|207_aa|+|1890891|1891514 [L=207]
Query: gene_1896|GeneMark.hmm|352_aa|-|1891504|1892562 [L=352]
Query: gene_1897|GeneMark.hmm|455_aa|-|1892574|1893941 [L=455]
7.9e-06 15.8 0.4 7.9e-06 15.8 0.4 2.2 2 fa_alignment_TIGR03930
Query: gene_1898|GeneMark.hmm|122_aa|-|1894578|1894946 [L=122]
Query: gene_1899|GeneMark.hmm|336_aa|-|1895066|1896076 [L=336]
Query: gene_1900|GeneMark.hmm|306_aa|+|1896259|1897179 [L=306]
Query: gene_1901|GeneMark.hmm|271_aa|-|1897164|1897979 [L=271]
Query: gene_1902|GeneMark.hmm|162_aa|-|1897979|1898467 [L=162]
Query: gene_1903|GeneMark.hmm|216_aa|-|1898460|1899110 [L=216]
Query: gene_1904|GeneMark.hmm|339_aa|+|1899145|1900164 [L=339]
Query: gene_1905|GeneMark.hmm|379_aa|+|1900164|1901303 [L=379]
Query: gene_1906|GeneMark.hmm|229_aa|+|1901333|1902022 [L=229]
9.1e-05 12.1 4.8 0.00014 11.5 4.8 1.4 1 fa_alignment_TIGR03927
Query: gene_1907|GeneMark.hmm|375_aa|+|1901995|1903122 [L=375]
Query: gene_1908|GeneMark.hmm|267_aa|+|1903132|1903935 [L=267]
Query: gene_1909|GeneMark.hmm|398_aa|+|1904060|1905256 [L=398]
Query: gene_1910|GeneMark.hmm|148_aa|-|1905226|1905672 [L=148]
Query: gene_1911|GeneMark.hmm|409_aa|-|1905669|1906898 [L=409]
Query: gene_1912|GeneMark.hmm|320_aa|-|1906895|1907857 [L=320]
Query: gene_1913|GeneMark.hmm|161_aa|-|1907854|1908339 [L=161]
Query: gene_1529|GeneMark.hmm|157_aa|-|1549490|1549963 [L=157]
Query: gene_1530|GeneMark.hmm|380_aa|+|1550469|1551611 [L=380]
Query: gene_1531|GeneMark.hmm|295_aa|-|1551681|1552568 [L=295]
Query: gene_1532|GeneMark.hmm|246_aa|-|1553214|1553954 [L=246]
Query: gene_1533|GeneMark.hmm|510_aa|+|1553962|1555494 [L=510]
2.7e-05 12.7 0.3 0.00013 10.4 0.2 1.9 2 fa_alignment_TIGR03924
4.9e-05 11.6 0.2 7.6e-05 11.0 0.2 1.2 1 fa_alignment_TIGR03922
7.3e-05 10.1 0.3 0.00019 8.7 0.1 1.6 2 fa_alignment_TIGR03928
Query: gene_1534|GeneMark.hmm|316_aa|-|1555533|1556483 [L=316]
Query: gene_1535|GeneMark.hmm|214_aa|+|1556643|1557287 [L=214]
Query: gene_1536|GeneMark.hmm|267_aa|-|1557266|1558069 [L=267]
Query: gene_1537|GeneMark.hmm|439_aa|+|1558180|1559499 [L=439]
Query: gene_1538|GeneMark.hmm|247_aa|-|1559496|1560239 [L=247]
Query: gene_1539|GeneMark.hmm|455_aa|+|1560375|1561742 [L=455]
Query: gene_1540|GeneMark.hmm|312_aa|+|1561897|1562835 [L=312]
Query: gene_1541|GeneMark.hmm|635_aa|-|1562840|1564747 [L=635]
Query: gene_1542|GeneMark.hmm|105_aa|+|1564857|1565174 [L=105]
Query: gene_1543|GeneMark.hmm|625_aa|-|1565197|1567074 [L=625]
merci mais non ça ne fonctionne pas :/
voici la tête de mon fichier:
Query: gene_1|GeneMark.hmm|491_aa|+|1|1476 [L=491]
Query: gene_2|GeneMark.hmm|399_aa|+|2169|3368 [L=399]
Query: gene_3|GeneMark.hmm|297_aa|+|3419|4312 [L=297]
Query: gene_4|GeneMark.hmm|401_aa|+|4275|5480 [L=401]
Query: gene_5|GeneMark.hmm|183_aa|+|5473|6024 [L=183]
Query: gene_6|GeneMark.hmm|675_aa|+|6249|8276 [L=675]
Query: gene_7|GeneMark.hmm|403_aa|+|8409|9620 [L=403]
4.6e-06 16.6 0.3 2.5e-05 14.3 0.1 2.3 2 fa_alignment_TIGR03930
Query: gene_8|GeneMark.hmm|75_aa|+|9620|9847 [L=75]
Query: gene_9|GeneMark.hmm|94_aa|+|10152|10436 [L=94]
Query: gene_10|GeneMark.hmm|404_aa|-|10485|11699 [L=404]
Query: gene_11|GeneMark.hmm|130_aa|-|11717|12109 [L=130]
Query: gene_12|GeneMark.hmm|172_aa|-|12325|12843 [L=172]
Query: gene_13|GeneMark.hmm|34_aa|-|12884|12988 [L=34]
Query: gene_20|GeneMark.hmm|844_aa|+|18374|20908 [L=844]
Query: gene_21|GeneMark.hmm|297_aa|+|20967|21860 [L=297]
Query: gene_22|GeneMark.hmm|423_aa|-|22158|23429 [L=423]
Query: gene_23|GeneMark.hmm|305_aa|+|23501|24418 [L=305]
Query: gene_24|GeneMark.hmm|134_aa|-|24439|24843 [L=134]
Query: gene_25|GeneMark.hmm|197_aa|+|24946|25539 [L=197]
Query: gene_26|GeneMark.hmm|252_aa|+|25651|26409 [L=252]
Query: gene_27|GeneMark.hmm|299_aa|-|26466|27365 [L=299]
Query: gene_1887|GeneMark.hmm|183_aa|+|1884131|1884682 [L=183]
1.2e-05 15.4 1.6 1.9e-05 14.7 1.6 1.3 1 fa_alignment_TIGR03931
Query: gene_1888|GeneMark.hmm|141_aa|+|1884774|1885199 [L=141]
Query: gene_1889|GeneMark.hmm|153_aa|+|1885231|1885692 [L=153]
Query: gene_1890|GeneMark.hmm|147_aa|+|1885923|1886366 [L=147]
Query: gene_1891|GeneMark.hmm|400_aa|+|1886592|1887794 [L=400]
Query: gene_1892|GeneMark.hmm|114_aa|-|1887842|1888186 [L=114]
Query: gene_1893|GeneMark.hmm|246_aa|+|1888779|1889519 [L=246]
Query: gene_1894|GeneMark.hmm|380_aa|+|1889651|1890793 [L=380]
Query: gene_1895|GeneMark.hmm|207_aa|+|1890891|1891514 [L=207]
Query: gene_1896|GeneMark.hmm|352_aa|-|1891504|1892562 [L=352]
Query: gene_1897|GeneMark.hmm|455_aa|-|1892574|1893941 [L=455]
7.9e-06 15.8 0.4 7.9e-06 15.8 0.4 2.2 2 fa_alignment_TIGR03930
Query: gene_1898|GeneMark.hmm|122_aa|-|1894578|1894946 [L=122]
Query: gene_1899|GeneMark.hmm|336_aa|-|1895066|1896076 [L=336]
Query: gene_1900|GeneMark.hmm|306_aa|+|1896259|1897179 [L=306]
Query: gene_1901|GeneMark.hmm|271_aa|-|1897164|1897979 [L=271]
Query: gene_1902|GeneMark.hmm|162_aa|-|1897979|1898467 [L=162]
Query: gene_1903|GeneMark.hmm|216_aa|-|1898460|1899110 [L=216]
Query: gene_1904|GeneMark.hmm|339_aa|+|1899145|1900164 [L=339]
Query: gene_1905|GeneMark.hmm|379_aa|+|1900164|1901303 [L=379]
Query: gene_1906|GeneMark.hmm|229_aa|+|1901333|1902022 [L=229]
9.1e-05 12.1 4.8 0.00014 11.5 4.8 1.4 1 fa_alignment_TIGR03927
Query: gene_1907|GeneMark.hmm|375_aa|+|1901995|1903122 [L=375]
Query: gene_1908|GeneMark.hmm|267_aa|+|1903132|1903935 [L=267]
Query: gene_1909|GeneMark.hmm|398_aa|+|1904060|1905256 [L=398]
Query: gene_1910|GeneMark.hmm|148_aa|-|1905226|1905672 [L=148]
Query: gene_1911|GeneMark.hmm|409_aa|-|1905669|1906898 [L=409]
Query: gene_1912|GeneMark.hmm|320_aa|-|1906895|1907857 [L=320]
Query: gene_1913|GeneMark.hmm|161_aa|-|1907854|1908339 [L=161]
Query: gene_1529|GeneMark.hmm|157_aa|-|1549490|1549963 [L=157]
Query: gene_1530|GeneMark.hmm|380_aa|+|1550469|1551611 [L=380]
Query: gene_1531|GeneMark.hmm|295_aa|-|1551681|1552568 [L=295]
Query: gene_1532|GeneMark.hmm|246_aa|-|1553214|1553954 [L=246]
Query: gene_1533|GeneMark.hmm|510_aa|+|1553962|1555494 [L=510]
2.7e-05 12.7 0.3 0.00013 10.4 0.2 1.9 2 fa_alignment_TIGR03924
4.9e-05 11.6 0.2 7.6e-05 11.0 0.2 1.2 1 fa_alignment_TIGR03922
7.3e-05 10.1 0.3 0.00019 8.7 0.1 1.6 2 fa_alignment_TIGR03928
Query: gene_1534|GeneMark.hmm|316_aa|-|1555533|1556483 [L=316]
Query: gene_1535|GeneMark.hmm|214_aa|+|1556643|1557287 [L=214]
Query: gene_1536|GeneMark.hmm|267_aa|-|1557266|1558069 [L=267]
Query: gene_1537|GeneMark.hmm|439_aa|+|1558180|1559499 [L=439]
Query: gene_1538|GeneMark.hmm|247_aa|-|1559496|1560239 [L=247]
Query: gene_1539|GeneMark.hmm|455_aa|+|1560375|1561742 [L=455]
Query: gene_1540|GeneMark.hmm|312_aa|+|1561897|1562835 [L=312]
Query: gene_1541|GeneMark.hmm|635_aa|-|1562840|1564747 [L=635]
Query: gene_1542|GeneMark.hmm|105_aa|+|1564857|1565174 [L=105]
Query: gene_1543|GeneMark.hmm|625_aa|-|1565197|1567074 [L=625]
Normal, dans ton exemple c'est alignEment et là c'est sans E (alignment) ;-((
Après correction et sur le vrai fichier :
Après correction et sur le vrai fichier :
sed -n 'N;/\n.*fa_alignment/!{D};:z;s/\n/ /;N;/\n.*fa_alignment/bz;P;D' brol
Query: gene_7|GeneMark.hmm|403_aa|+|8409|9620 [L=403] 4.6e-06 16.6 0.3 2.5e-05 14.3 0.1 2.3 2 fa_alignment_TIGR03930
Query: gene_1887|GeneMark.hmm|183_aa|+|1884131|1884682 [L=183] 1.2e-05 15.4 1.6 1.9e-05 14.7 1.6 1.3 1 fa_alignment_TIGR03931
Query: gene_1897|GeneMark.hmm|455_aa|-|1892574|1893941 [L=455] 7.9e-06 15.8 0.4 7.9e-06 15.8 0.4 2.2 2 fa_alignment_TIGR03930
Query: gene_1906|GeneMark.hmm|229_aa|+|1901333|1902022 [L=229] 9.1e-05 12.1 4.8 0.00014 11.5 4.8 1.4 1 fa_alignment_TIGR03927
Query: gene_1533|GeneMark.hmm|510_aa|+|1553962|1555494 [L=510] 2.7e-05 12.7 0.3 0.00013 10.4 0.2 1.9 2 fa_alignment_TIGR03924 4.9e-05 11.6 0.2 7.6e-05 11.0 0.2 1.2 1 fa_alignment_TIGR03922 7.3e-05 10.1 0.3 0.00019 8.7 0.1 1.6 2 fa_alignment_TIGR03928
$ cat script.sed
#n
N
/\n.*fa_alignment/ !{
D
}
:z
s/\n/ /
N
/\n.*fa_alignment/ b z
P
D
Pour une meilleure compréhension, j'ai mis les commandes dans un fichier (script.sed) et que l'on peut appeler comme suit
sed -f script.sed fichier_à_traiter
Les explications :
#nOn imprime sur la sortie standard que sur demande (commande "p" ou "P")
NOn ajoute la ligne suivante dans la mémoire principale
/\n.*fa_alignment/ !{Si le motif (caractère saut de ligne + fa_alignment) n'est pas trouvé (le ! représente la négation), on applique la ou les commandes entre les accolades
DOn efface tout ce qui se trouve avant le caractère saut de ligne et on repart en début de script (en fait ici comme il n'y a pas de \n, on efface le buffer)
}Fin des commandes ne concernant pas le motif.
Si le motif est trouvé, on applique les commandes suivantes...
:zOn pose une étiquette (pour s'y brancher dessus plus loin selon une condition)
s/\n/ /On substitue le saut de ligne par un espace
NOn ajoute la ligne suivante dans la mémoire principale
/\n.*fa_alignment/ b zSi le motif est trouvé, on se branche (commande "b") à l'étiquette ("z") et on recommence
PSi le moti n'est pas trouvé, on imprime sur la sortie standard tout ce qui se trouve avant le 1er caractère saut de ligne
DPuis on efface tout ce qui se trouve avant le caractère saut de ligne et on repart en début de script