From 28933d542cac634ff4a09b162bf0793e45d129d8 Mon Sep 17 00:00:00 2001 From: tTh Date: Mon, 16 Sep 2024 03:21:41 +0200 Subject: [PATCH] finished the first awk example --- chap/scripting.tex | 51 ++++++++++++++++++++++++++++++++++++++++---- code/awk/mkunion.awk | 5 ++++- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/chap/scripting.tex b/chap/scripting.tex index 801dec1..cf812e3 100644 --- a/chap/scripting.tex +++ b/chap/scripting.tex @@ -9,9 +9,12 @@ par Aho, Kernighan, and Weinberger% \footnote{The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X. }. +Son originalité vient du fait qu'il a été conçu principalement +pour traiter ligne par ligne des fichiers tabulés. +C'est son domaine de prédilection, autant en profiter. Quelques \textsl{oneliners} de bon aloi pour vous donner -une idée du langage\dots +une idée des possibilités du langage\dots \begin{verbatim} cat { print $0 } or just 1 @@ -32,15 +35,17 @@ on va procéder en quelque sorte « demi-dalle par demi-dalle ». \subsection{Un exemple simple} À partir d'un jeu de données structurées, nous allons générer un -fichier \texttt{.inc} contenant un objet pour Povray\index{Povray}. +fichier \texttt{.inc} contenant la description en +SDL\index{SDL}\footnote{SDL: Scene Description Language} +d'un objet pour Povray\index{Povray}. Un cas d'école : un élément par ligne, les valeurs sont séparées par -des espaces. +des espaces et/ou des tabulations. \lstinputlisting[]{code/awk/dataset} Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une petite collection de bubulles. Pratiquement, une représentation -sommaire d'une sphère de povray\footnote{SDL keyword: \texttt{Sphere}}. +sommaire d'une sphère de povray\footnote{SDL keyword: \texttt{sphere}}. Le fichier à générer est en trois partie : l'en-tête, la liste des bubulles\index{bubulle} et l'en-pied, ce qui est bien raccord @@ -49,7 +54,45 @@ le voir ici-même~: \lstinputlisting[]{code/awk/mkunion.awk} +La première ligne est pour le traditionnel +\textsl{shebang}\index{shebang}, +avec l'option \texttt{-f} pour que le contenu du script soit lu +par l'interpréteur Awk dès son lancement. +Ensuite, nous trouvons trois blocs délimités par des accolades, +deux d'entre eux étant précédés d'une « instruction ». + +Le premier bloc, avec le mot-clef \textsc{BEGIN}, est exécuté +avant la lecture de la première ligne des données en entrée. +Nous l'utilisons pour créer l'en-tête d'un descripteur +d'objet pour Povray. + +Le second bloc (sans label) est exécuté pour chaque ligne lue. +Et c'est ici que nous trouverons la magie. + +Et le troisième bloc (\textsc{END}) sera exécuté à la fin, après +la lecture et le traitement du dernier enregistrement, +qui sera dans notre cas la dernière ligne. + +Et à l'exécution~: + +\begin{verbatim} +tth@redlady:~/Devel/TetaTricks/code/awk$ ./mkunion.awk < dataset +#declare Bubules = object +{ +union { + sphere { <17.000000, 9.000000, 4.000000>, 1.500000 } + sphere { <11.000000, 0.800000, 2.300000>, 0.989000 } + sphere { <0.000000, 0.000000, 0.000000>, 1.000000 } + } +} +\end{verbatim} + % XXX to be continued XXX % =============================================================== +\subsection{Définir une fonction} + +% =============================================================== + + diff --git a/code/awk/mkunion.awk b/code/awk/mkunion.awk index 1709086..2210feb 100755 --- a/code/awk/mkunion.awk +++ b/code/awk/mkunion.awk @@ -1,15 +1,18 @@ #!/usr/bin/awk -f +# create the sdl object: an union of sphere BEGIN { print "#declare Bubules = object" print "{ \nunion { " } +# active portion of the code { printf(" sphere { <%f, %f, %f>, %f }\n", \ $1, $2, $3, $4 ) } +# closing sdl structure END { - + print " }\n}\n" }