Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:awk [27/10/2013 16:50] smolski |
doc:programmation:awk [27/10/2013 17:27] smolski [Exercices] |
||
---|---|---|---|
Ligne 31: | Ligne 31: | ||
Et rédigez(([[:doc:systeme:cat]])) dedans cette liste ainsi : | Et rédigez(([[:doc:systeme:cat]])) dedans cette liste ainsi : | ||
<code user tp_awk1> | <code user tp_awk1> | ||
- | cat > file.txt <<EOS | + | cat > file.txt <<EOF |
Nom Genre Age | Nom Genre Age | ||
--------------------------------------- | --------------------------------------- | ||
Ligne 40: | Ligne 40: | ||
EMMA F 6 | EMMA F 6 | ||
THEO M 8 | THEO M 8 | ||
- | EOS</code> | + | EOF</code> |
==== Extraire des colonnes ==== | ==== Extraire des colonnes ==== | ||
Ligne 129: | Ligne 129: | ||
==== Scripts awk ==== | ==== Scripts awk ==== | ||
- | <note warning>**ATTENTION** ! Vérifiez toujours l'écriture de chaque script donné ici avant de l'appliquer !</note> | + | <note warning>**ATTENTION** ! Vérifiez toujours l'écriture de chaque script donné ici avant de l'appliquer ! \\ |
+ | Les exemples des scripts à copier avec **[[doc:systeme:cat | la commande cat]]** qui suivent nécessite le caractère d'échappement %%\%% devant le symbole $ afin que celui-ci soit écrit dans le script définitif __sans être interprété__ par la commande **cat** ! \\ | ||
+ | Ces anti-slash ne sont pas nécessaires lorsque vous rédigez vos propres scripts manuellement. \\ | ||
+ | Voir : **[[doc:programmation:shell:regexp#les_caracteres_echappes | Les Regexp.]]** //Et c'est pas la peine de faire Ouch..! Tuto inévitable à ce niveau.// :-P</note> | ||
awk a été utilisé précédemment en mode lignes de commande. Lorsque le programme awk devient complexe, ce dernier peut être stocké dans un fichier ''prog.awk'' comme ici : | awk a été utilisé précédemment en mode lignes de commande. Lorsque le programme awk devient complexe, ce dernier peut être stocké dans un fichier ''prog.awk'' comme ici : | ||
<code user prog.awk> | <code user prog.awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
/^CL/,/^E/ { | /^CL/,/^E/ { | ||
print NR, \$0 | print NR, \$0 | ||
} | } | ||
- | EOS</code> | + | EOF</code> |
Puis interprété grâce à l'option -f : | Puis interprété grâce à l'option -f : | ||
Ligne 153: | Ligne 156: | ||
awk offre des sections pré-traitement (BEGIN) et post-traitement (END) lors de l'analyse d'un fichier. La structure du script awk est : | awk offre des sections pré-traitement (BEGIN) et post-traitement (END) lors de l'analyse d'un fichier. La structure du script awk est : | ||
<code user prog_awk> | <code user prog_awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
/^CL/,/^E/ | /^CL/,/^E/ | ||
BEGIN { | BEGIN { | ||
Ligne 166: | Ligne 169: | ||
action | action | ||
} | } | ||
- | EOS</code> | + | EOF</code> |
Donne : | Donne : | ||
Ligne 180: | Ligne 183: | ||
Des scripts bien plus complexes peuvent alors être écrits. Par exemple, extraire 2 colonnes en remplaçant les tabulations par des ";" et afficher le nombre de lignes à la fin : | Des scripts bien plus complexes peuvent alors être écrits. Par exemple, extraire 2 colonnes en remplaçant les tabulations par des ";" et afficher le nombre de lignes à la fin : | ||
<code user prog_awk> | <code user prog_awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
BEGIN { | BEGIN { | ||
FS=" " | FS=" " | ||
Ligne 191: | Ligne 194: | ||
printf "\nThe file has %d lines\n", NR | printf "\nThe file has %d lines\n", NR | ||
} | } | ||
- | EOS</code> | + | EOF</code> |
Ligne 298: | Ligne 301: | ||
La possibilité de créer des fonctions utilisateur est une des fonctionnalités les plus importantes de l'utilitaire awk. Les fonctions sont définies avec le mot clé **function**. | La possibilité de créer des fonctions utilisateur est une des fonctionnalités les plus importantes de l'utilitaire awk. Les fonctions sont définies avec le mot clé **function**. | ||
<code user prog_awk> | <code user prog_awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
function gentag(nom,age) { | function gentag(nom,age) { | ||
tmp=tolower(substr(nom,1,3)) | tmp=tolower(substr(nom,1,3)) | ||
Ligne 316: | Ligne 319: | ||
print NR , "lines" | print NR , "lines" | ||
} | } | ||
- | EOS | + | EOF |
</code> | </code> | ||
Ligne 340: | Ligne 343: | ||
Les enfants sont ils en primaire ou au collège avec if() {} else {} ? | Les enfants sont ils en primaire ou au collège avec if() {} else {} ? | ||
<code user prog_awk> | <code user prog_awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
BEGIN { | BEGIN { | ||
OFS="," | OFS="," | ||
Ligne 354: | Ligne 357: | ||
print \$1, ecole | print \$1, ecole | ||
} | } | ||
- | EOS | + | EOF |
</code> | </code> | ||
Ligne 373: | Ligne 376: | ||
Remplacer l'âge de l'enfant par un nombre de points avec while() {}. | Remplacer l'âge de l'enfant par un nombre de points avec while() {}. | ||
<code user prog_awk> | <code user prog_awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
NR <=2 { next } | NR <=2 { next } | ||
{ | { | ||
Ligne 384: | Ligne 387: | ||
printf "\n" | printf "\n" | ||
} | } | ||
- | EOS | + | EOF |
</code> | </code> | ||
Ligne 401: | Ligne 404: | ||
Remplacer l'âge de l'enfant par un nombre de points avec for (i= ; i< ; i++ ) { }. | Remplacer l'âge de l'enfant par un nombre de points avec for (i= ; i< ; i++ ) { }. | ||
<code user prog_awk> | <code user prog_awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
NR <=2 { next } | NR <=2 { next } | ||
{ | { | ||
Ligne 410: | Ligne 413: | ||
printf "\n" | printf "\n" | ||
} | } | ||
- | EOS | + | EOF |
</code> | </code> | ||
Ligne 432: | Ligne 435: | ||
Calculer la moyenne d'âge des enfants par sexe : | Calculer la moyenne d'âge des enfants par sexe : | ||
<code user prog_awk> | <code user prog_awk> | ||
- | cat > prog.awk <<EOS | + | cat > prog.awk <<EOF |
{ | { | ||
if ( NR <= 2 ) { next } # skip first 2 lines | if ( NR <= 2 ) { next } # skip first 2 lines | ||
- | tab_age[$2]+=$3 | + | tab_age[\$2]+=\$3 |
- | tab_cpt[$2]++ | + | tab_cpt[\$2]++ |
} | } | ||
END { | END { | ||
Ligne 443: | Ligne 446: | ||
} | } | ||
} | } | ||
- | EOS | + | EOF |
</code> | </code> | ||