logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [18/10/2012 13:22]
smolski
doc:programmation:awk [18/10/2012 13:40]
smolski
Ligne 180: Ligne 180:
 } }
  
-        print \$1, $3 +        print \$1, \$3 
 } }
 END {  END { 
Ligne 310: Ligne 310:
 print NR , "​lines"​ print NR , "​lines"​
 } }
 +EOS
 </​code>​ </​code>​
  
 <code bash> <code bash>
-awk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
-EOS+
 <​code>​ <​code>​
 Nom;​Age;​nom_Age Nom;​Age;​nom_Age
Ligne 325: Ligne 326:
 THEO;​8;​the_8 THEO;​8;​the_8
 8;​lines</​code>​ 8;​lines</​code>​
 +
 +===== Programmation =====
 +
 +Le parseur awk offre toutes les structures de programmation : conditions, boucles, itérations.
 +
 +==== Condition ====
 +
 +Les enfants sont ils en primaire ou au collège avec if() {} else {} ?
 +<code bash>
 +cat prog.awk <<EOS
 +BEGIN {
 +        OFS=","​
 +}
 +NR <=2 { next }
 +{
 +        if ( \$3 < 11 ) {
 +                ecole="​primaire"​
 +        } else {
 +                ecole="​college"​
 +        }
 +
 +        print \$1, ecole
 +}
 +EOS </​code>​
 +<code bash>
 +nawk -f prog.awk file.txt</​code>​
 +<​code>​
 +CAMILLE,​primaire
 +CHLOE,​college
 +CLARA,​college
 +CLEMENT,​primaire
 +EMMA,​primaire
 +THEO,​primaire</​code>​
 +
 +Remarquer la façon dont l'​entête est écartée : NR <=2 { next }
 +
 +==== Boucles ====
 +
 +Remplacer l'âge de l'​enfant par un nombre de points avec while() {}.
 +<code bash>
 +cat > prog.awk
 +NR <=2 { next }
 +{
 +        min=1
 +        printf "​%-10s",​ \$1
 +        while  ( min <= \$3 ) {
 +                printf "​."​
 +                min++
 +        }
 +        printf "​\n"​
 +}
 +<code bash>
 +awk -f prog.awk file.txt</​code>​
 +<​code>​
 +CAMILLE ​  ​.......
 +CHLOE     ​............
 +CLARA     ​...........
 +CLEMENT ​  ​.......
 +EMMA      ......
 +THEO      ........</​code>​
 +
 +==== Itérations ====
 +
 +Remplacer l'âge de l'​enfant par un nombre de points avec for (i= ; i< ; i++ ) { }.
 +<code bash>
 +cat > prog.awk <<EOS
 +NR <=2 { next }
 +{
 +        printf "​%-10s",​ \$1
 +        for ( min=1 ; min <= \$3; min++ ) {
 +                printf "​."​
 +        }
 +        printf "​\n"​
 +}EOS
 +</​code>​
 +
 +<code bash>
 +awk -f prog.awk file.txt</​code>​
 +<​code>​
 +CAMILLE ​  ​.......
 +CHLOE     ​............
 +CLARA     ​...........
 +CLEMENT ​  ​.......
 +EMMA      ......
 +THEO      ........</​code>​
 +
 +==== Tableaux (Arrays) ====
 +
 +Pour terminer cette brève présentation : les tableaux avec awk, particulièrement pratiques pour calculer des agrégats. \\
 +La structure d'un tableau avec awk est très simple :
 +
 +tab[indice] = value
 +
 +Calculer la moyenne d'âge des enfants par sexe :
 +<code bash>
 +cat < prog.awk <<EOS
 +
 +        if ( NR <= 2 ) { next } # skip first 2 lines
 +        tab_age[$2]+=$3
 +        tab_cpt[$2]++
 +}
 +END { 
 +        for ( genre in tab_age ) { 
 +        print genre, " : ", "Moy :", int(tab_age[genre]/​tab_cpt[genre]),​ "​ans",​ "nb :", tab_cpt[genre] ​
 +        }
 +}EOS
 +</​code>​
 +
 +<code bash>
 +awk -f prog.awk file.txt</​code>​
 +<​code>​
 +F : Moy : 9 ans nb : 3
 +M : Moy : 7 ans nb : 3</​code>​
 +
 +Remarquer comment les 2 tableaux sont remplis et traités à la fin.
  
  
 +===== Lien =====
  
 +Un lieu formidable là :
 +  * [[http://​www.sqlpac.com/​articles/​unix-linux/​outils | Outil Linux - **SQLPAC** SQL Pour Administrateurs & Concepteurs]]
  
-//À suivre...// **Jojo** ;-) 
doc/programmation/awk.txt · Dernière modification: 02/06/2015 18:44 par milou

Pied de page des forums

Propulsé par FluxBB