Inclure un fichier dans un autre en AWK

Sep. 21, 2012

Bonjour.

Une fois n’est pas coutume, un peu d’informatique sur ce blog (ne vous inquiétez pas, ça ne durera pas longtemps, le prochain INT10 est prévu pour mercredi soir :D).

J’ai été confronté au besoin de remplacer une chaine de caractères par le contenu d’un fichier dans un fichier texte.

Exemple : je désire remplacer “##__youpi_tralala__##” par le contenu du fichier nommé “youpi_tralala”.

J’ai essayé en sed, mais ça ne fonctionnait pas à tout les coups, avec sed qui voulait interpréter le contenu du fichier “youpi_tralala”.

Donc j’ai sorti mes moufles et mon outil préféré (AWK).

Voici le résultat, le script include_file.awk :

{ str=$0 where=match(str,regexp) if (where) { while ((“cat “file) | getline tstr > 0) { if (newstr == “") { newstr=tstr } else { newstr=newstr”\n"tstr } } close (tstr) sub(regexp,newstr,str) } print str }

C’est un beau script AWK, qui s’appelle de la façon suivante : awk -v regexp=“belle regexp” -v file=/chemin/vers/le/fichier/a/inclure -f include_file.awk fichier_contenant_la_regex

Je m’en sers souvent en LaTeX pour débugguer certains include un peu farfelus que je veux faire, pour savoir si c’est le contenu du fichier à inclure ou mon include qui cause le problème.

Pour l’utiliser avec LaTeX, voici un exemple :

awk -v regexp="^%%__paragraphe1__%%$” -v file=includes/paragraphe1.tex -f include_file.awk document.tex | pdflatex -jobname=document

Ici, la chaîne présente dans mon fichier document.tex est “%%__paragraphe1__%%”.

Et comme on dit : “Ça marche mais c’est crado… C’est made in davro !!”

Merci.