finished the first awk example
This commit is contained in:
parent
0ee9005885
commit
28933d542c
@ -9,9 +9,12 @@ par Aho, Kernighan, and Weinberger%
|
|||||||
\footnote{The AWK Programming Language, Alfred V. Aho,
|
\footnote{The AWK Programming Language, Alfred V. Aho,
|
||||||
Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988.
|
Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988.
|
||||||
ISBN 0-201-07981-X. }.
|
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
|
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}
|
\begin{verbatim}
|
||||||
cat { print $0 } or just 1
|
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}
|
\subsection{Un exemple simple}
|
||||||
|
|
||||||
À partir d'un jeu de données structurées, nous allons générer un
|
À 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
|
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}
|
\lstinputlisting[]{code/awk/dataset}
|
||||||
|
|
||||||
Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une
|
Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une
|
||||||
petite collection de bubulles. Pratiquement, une représentation
|
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
|
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
|
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}
|
\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
|
% XXX to be continued XXX
|
||||||
|
|
||||||
% ===============================================================
|
% ===============================================================
|
||||||
|
\subsection{Définir une fonction}
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,15 +1,18 @@
|
|||||||
#!/usr/bin/awk -f
|
#!/usr/bin/awk -f
|
||||||
|
|
||||||
|
# create the sdl object: an union of sphere
|
||||||
BEGIN {
|
BEGIN {
|
||||||
print "#declare Bubules = object"
|
print "#declare Bubules = object"
|
||||||
print "{ \nunion { "
|
print "{ \nunion { "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# active portion of the code
|
||||||
{
|
{
|
||||||
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
||||||
$1, $2, $3, $4 )
|
$1, $2, $3, $4 )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# closing sdl structure
|
||||||
END {
|
END {
|
||||||
|
print " }\n}\n"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user