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 [27/10/2013 17:27]
smolski [Exercices]
doc:programmation:awk [27/10/2013 18:25]
smolski [awk]
Ligne 1: Ligne 1:
 ====== awk ====== ====== awk ======
  
-(//testé// - **smolski** 18/10/2012) Le retour sur le forum est ici : 
-  * [[http://​debian-facile.org/​viewtopic.php?​id=6057 | Lien vers le forum concernant ce tuto]] N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs ! 
   * Objet : awk   * Objet : awk
-  * Niveau requis : AVISÉ+  * Niveau requis : {{tag>​avisé}}
   * Commentaires : // Cet utilitaire a été créé dans le but de remplacer les commandes [[:​doc:​systeme:​grep]] et [[:​doc:​systeme:​sed]]. //   * Commentaires : // Cet utilitaire a été créé dans le but de remplacer les commandes [[:​doc:​systeme:​grep]] et [[:​doc:​systeme:​sed]]. //
-  * Débutant, à savoir : +  ​* Suivi : {{tag>​à-compléter}} 
-[[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)+  ​* Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
     * Création par **smolski** 18/10/2012)     * Création par **smolski** 18/10/2012)
-    * Testé par **smolski** le 18/10/2012)+    * Testé par **smolski** le 28/10/2013)
   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=6057 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))    * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=6057 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) 
  
Ligne 25: Ligne 23:
 ===== Exercices ===== ===== Exercices =====
  
-Créez ​le fichier(([[:​doc:​systeme:​touch]])) file.txt ​ainsi +Créez((Vous pouvez faire cela avec votre éditeur de texte favori, voire avec [[:​doc:​systeme:​cat]] ou simplement en téléchargeant la liste.)) le fichier ''​file.txt''​ contenant la liste suivante ​
-<​code ​user> +<​code ​raw file.txt>​
-touch file.txt</code> +
- +
-Et rédigez(([[:​doc:​systeme:​cat]])) dedans cette liste ainsi : +
-<code user tp_awk1>​ +
-cat >  file.txt <<EOF+
 Nom             ​Genre ​          Age Nom             ​Genre ​          Age
 --------------------------------------- ---------------------------------------
Ligne 40: Ligne 33:
 EMMA            F               6 EMMA            F               6
 THEO            M               8 THEO            M               8
-EOF</​code>​+</​code>​
  
 ==== Extraire des colonnes ==== ==== Extraire des colonnes ====
Ligne 130: Ligne 123:
  
 <note warning>​**ATTENTION** ! Vérifiez toujours l'​écriture de chaque script donné ici avant de l'​appliquer ! \\ <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>​ 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 ​awk prog.awk>​
-cat > prog.awk <<EOF+
 /^CL/,/^E/ {  /^CL/,/^E/ { 
      print NR, \$0       print NR, \$0 
 } }
-EOF</​code>​+</​code>​
  
 Puis interprété grâce à l'​option -f : Puis interprété grâce à l'​option -f :
Ligne 155: Ligne 145:
  
 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 ​awk prog.awk>
-cat > prog.awk ​<<EOF+
 /​^CL/,/​^E/ ​ /​^CL/,/​^E/ ​
 BEGIN { BEGIN {
Ligne 169: Ligne 158:
         action         action
 } }
-EOF</​code>​+</​code>​
  
 Donne : Donne :
Ligne 182: Ligne 171:
  
 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 ​awk prog.awk>
-cat > prog.awk ​<<EOF+
 BEGIN {  BEGIN { 
         FS=" "         FS=" "
Ligne 189: Ligne 177:
 } }
  
-        print \$1, \$3 +        print $1, $3 
 } }
 END {  END { 
         printf "\nThe file has %d lines\n",​ NR          printf "\nThe file has %d lines\n",​ NR 
 } }
-EOF</​code>​+</​code>​
  
  
Ligne 300: Ligne 288:
  
 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 ​awk prog.awk>
-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 313: Ligne 300:
  
  
-        print \$1, \$3, gentag(\$1,\$3)+        print $1, $3, gentag($1,​$3)
 } }
  
Ligne 319: Ligne 306:
 print NR , "​lines"​ print NR , "​lines"​
 } }
-EOF 
 </​code>​ </​code>​
  
-<​code ​bash>+<​code ​user>
 awk -f prog.awk file.txt</​code>​ awk -f prog.awk file.txt</​code>​
 <​code>​ <​code>​
Ligne 342: Ligne 328:
  
 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 ​awk prog.awk>
-cat > prog.awk ​<<EOF+
 BEGIN { BEGIN {
         OFS=","​         OFS=","​
Ligne 349: Ligne 334:
 NR <=2 { next } NR <=2 { next }
 { {
-        if ( \$3 < 11 ) {+        if ( $3 < 11 ) {
                 ecole="​primaire"​                 ecole="​primaire"​
         } else {         } else {
Ligne 355: Ligne 340:
         }         }
  
-        print \$1, ecole+        print $1, ecole
 } }
-EOF 
 </​code>​ </​code>​
  
Ligne 370: Ligne 354:
 THEO,​primaire</​code>​ THEO,​primaire</​code>​
  
-Remarquer la façon dont l'​entête est écartée : NR <=2 { next }+<note tip>Remarquer la façon dont l'​entête est écartée : NR <=2 { next }</​note>​
  
 ==== Boucles ==== ==== Boucles ====
  
 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 ​awk prog.awk>
-cat > prog.awk ​<<EOF+
 NR <=2 { next } NR <=2 { next }
 { {
         min=1         min=1
-        printf "​%-10s", ​\$1 +        printf "​%-10s",​ $1 
-        while  ( min <= \$3 ) {+        while  ( min <= $3 ) {
                 printf "​."​                 printf "​."​
                 min++                 min++
Ligne 387: Ligne 370:
         printf "​\n"​         printf "​\n"​
 } }
-EOF 
 </​code>​ </​code>​
  
Ligne 403: Ligne 385:
  
 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 ​awk prog.awk>
-cat > prog.awk ​<<EOF+
 NR <=2 { next } NR <=2 { next }
 { {
-        printf "​%-10s", ​\$1 +        printf "​%-10s",​ $1 
-        for ( min=1 ; min <= \$3; min++ ) {+        for ( min=1 ; min <= $3; min++ ) {
                 printf "​."​                 printf "​."​
         }         }
         printf "​\n"​         printf "​\n"​
 } }
-EOF 
 </​code>​ </​code>​
  
Ligne 434: Ligne 414:
  
 Calculer la moyenne d'âge des enfants par sexe : Calculer la moyenne d'âge des enfants par sexe :
-<​code ​user prog_awk>​ +<​code ​awk prog.awk>
-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 446: Ligne 425:
         }         }
 } }
-EOF 
 </​code>​ </​code>​
  
Ligne 455: Ligne 433:
 M : Moy : 7 ans nb : 3</​code>​ M : Moy : 7 ans nb : 3</​code>​
  
-Remarquer comment les 2 tableaux sont remplis et traités à la fin.+<note tip>Remarquer comment les 2 tableaux sont remplis et traités à la fin.</​note>​
  
  
doc/programmation/awk.txt · Dernière modification: 02/06/2015 18:44 par milou

Pied de page des forums

Propulsé par FluxBB