Awk help

Résolu/Fermé
new_26 Messages postés 15 Date d'inscription samedi 9 août 2014 Statut Membre Dernière intervention 14 septembre 2015 - 9 août 2014 à 20:23
new_26 Messages postés 15 Date d'inscription samedi 9 août 2014 Statut Membre Dernière intervention 14 septembre 2015 - 10 août 2014 à 11:28
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!

4 réponses

new_26 Messages postés 15 Date d'inscription samedi 9 août 2014 Statut Membre Dernière intervention 14 septembre 2015
9 août 2014 à 20:24
une complication: les fa_alignement peuvent être identiques pour deux gene différents!
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
Modifié par zipe31 le 9/08/2014 à 20:39
Salut,

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. <('')
0
new_26 Messages postés 15 Date d'inscription samedi 9 août 2014 Statut Membre Dernière intervention 14 septembre 2015
9 août 2014 à 21:21
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!
0
dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 5 624
10 août 2014 à 08:57
hello
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
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
10 août 2014 à 09:25
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...

$ 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 ;-(
0
new_26 Messages postés 15 Date d'inscription samedi 9 août 2014 Statut Membre Dernière intervention 14 septembre 2015
10 août 2014 à 09:54
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]
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
10 août 2014 à 10:00
Normal, dans ton exemple c'est alignEment et là c'est sans E (alignment) ;-((

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
0
new_26 Messages postés 15 Date d'inscription samedi 9 août 2014 Statut Membre Dernière intervention 14 septembre 2015
10 août 2014 à 10:03
ah oui :/ je suis désolée de l'erreur!

ça fonctionne!!! MERCI
pourriez-vous m'expliquer la syntaxe, s'il vous plait?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
10 août 2014 à 10:17
$ 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 :


#n
On imprime sur la sortie standard que sur demande (commande "p" ou "P")

N
On 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

D
On 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...

:z
On pose une étiquette (pour s'y brancher dessus plus loin selon une condition)

s/\n/ /
On substitue le saut de ligne par un espace

N
On ajoute la ligne suivante dans la mémoire principale

/\n.*fa_alignment/ b z
Si le motif est trouvé, on se branche (commande "b") à l'étiquette ("z") et on recommence

P
Si 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

D
Puis on efface tout ce qui se trouve avant le caractère saut de ligne et on repart en début de script
0
new_26 Messages postés 15 Date d'inscription samedi 9 août 2014 Statut Membre Dernière intervention 14 septembre 2015
10 août 2014 à 11:28
merci beaucoup!
0