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 16:15]
smolski [Programmation]
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 46: Ligne 46:
 Extraire des données d'un fichier, par exemple les 2 premières colonnes : Extraire des données d'un fichier, par exemple les 2 premières colonnes :
 <code user> <code user>
-awk '{ print $1, $2 }' file.txt +awk '{ print $1, $2 }' file.txt</​code>​ 
 +<​code>​
 Nom Genre Nom Genre
 --------------------------------------- ​ --------------------------------------- ​
Ligne 71: Ligne 71:
 Retrouver les lignes qui contiennent CAMILLE : Retrouver les lignes qui contiennent CAMILLE :
 <code user> <code user>
-awk '/​CAMILLE/​ { print $1, $3, $2 }' file.txt +awk '/​CAMILLE/​ { print $1, $3, $2 }' file.txt</​code>​ 
 +<​code>​
 CAMILLE 7 M</​code>​ CAMILLE 7 M</​code>​
  
Ligne 80: Ligne 80:
 Un autre filtre plus complexe, rechercher les lignes qui commencent par C et qui contiennent la lettre A ou la lettre O : Un autre filtre plus complexe, rechercher les lignes qui commencent par C et qui contiennent la lettre A ou la lettre O :
 <code user> <code user>
-awk '/​^C.*[AO]/​ { print $1, $3, $2 }' file.txt +awk '/​^C.*[AO]/​ { print $1, $3, $2 }' file.txt</​code>​ 
 +<​code>​
 CAMILLE 7 M CAMILLE 7 M
 CHLOE 12 F CHLOE 12 F
Ligne 89: Ligne 89:
 Pour récupérer les lignes de CL à E, tapez : Pour récupérer les lignes de CL à E, tapez :
 <code user> <code user>
-awk '/​^CL/,/​^E/​ { print $0 }' file.txt +awk '/​^CL/,/​^E/​ { print $0 }' file.txt</​code>​ 
 +<​code>​
 CLARA F 11 CLARA F 11
 CLEMENT M 7 CLEMENT M 7
Ligne 105: Ligne 105:
  
 <code user> <code user>
-awk '{ print NR, NF, $0 }' file.txt +awk '{ print NR, NF, $0 }' file.txt</​code>​ 
 +<​code>​
 1 3 Nom         ​Genre ​          Age 1 3 Nom         ​Genre ​          Age
 2 1 --------------------------------------- 2 1 ---------------------------------------
Ligne 121: Ligne 121:
   * OFS : Séparateur de champ en sortie (par défaut : espace).   * OFS : Séparateur de champ en sortie (par défaut : espace).
 <code user> <code user>
-awk '/​CAMILLE/​ { OFS=","​ ; print $2,$1 }' file.txt +awk '/​CAMILLE/​ { OFS=","​ ; print $2,$1 }' file.txt</​code>​ 
 +<​code>​
 M,​CAMILLE</​code>​ M,​CAMILLE</​code>​
  
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 :
 <code user> <code user>
-awk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 5 CLARA F 11 5 CLARA F 11
 6 CLEMENT M 7 6 CLEMENT M 7
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 :
 <code user> <code user>
-awk -f prog.awk file.txt  +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 CLARA           ​F ​              11 CLARA           ​F ​              11
 CLEMENT ​        ​M ​              7 CLEMENT ​        ​M ​              7
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>​
  
  
 <code user> <code user>
-awk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 Nom;Age Nom;Age
 ---------------------------------------;​ ---------------------------------------;​
Ligne 220: Ligne 223:
 Convertir du texte en majuscules ou en minuscules avec les fonctions toupper et tolower Convertir du texte en majuscules ou en minuscules avec les fonctions toupper et tolower
 <code user> <code user>
-awk '/​THEO/​ { print $1, tolower($1) }' file.txt +awk '/​THEO/​ { print $1, tolower($1) }' file.txt</​code>​ 
 +<​code>​
 THEO theo</​code>​ THEO theo</​code>​
  
Ligne 228: Ligne 231:
 Convertir une valeur en entier avec la fonction **int** : Convertir une valeur en entier avec la fonction **int** :
 <code user> <code user>
-awk '/​CHLOE/​ { print $3, int($3/​5)}'​ file.txt +awk '/​CHLOE/​ { print $3, int($3/​5)}'​ file.txt</​code>​ 
 +<​code>​
 12 2</​code>​ 12 2</​code>​
  
Ligne 249: Ligne 252:
 Afficher la taille d'une chaîne de caractères avec la fonction length : Afficher la taille d'une chaîne de caractères avec la fonction length :
 <code user> <code user>
-awk '/​CLEM/​ { print $1, length($1) }' file.txt +awk '/​CLEM/​ { print $1, length($1) }' file.txt</​code>​ 
 +<​code>​
 CLEMENT 7</​code>​ CLEMENT 7</​code>​
  
Ligne 257: Ligne 260:
 Retourne la position d'une chaîne de caractères remplissant les critères d'une expression régulière avec la fonction match : Retourne la position d'une chaîne de caractères remplissant les critères d'une expression régulière avec la fonction match :
 <code user> <code user>
-awk 'NR >2 { print $1, match($1,"​A"​)}'​ file.txt +awk 'NR >2 { print $1, match($1,"​A"​)}'​ file.txt</​code>​ 
 +<​code>​
 CAMILLE 2 CAMILLE 2
 CHLOE 0 CHLOE 0
Ligne 270: Ligne 273:
 Remplacer des chaînes de caractères avec la fonction gsub : Remplacer des chaînes de caractères avec la fonction gsub :
 <code user> <code user>
-awk 'NR >2 { gsub("​A","​_",​$1) ; print $1 }' file.txt +awk 'NR >2 { gsub("​A","​_",​$1) ; print $1 }' file.txt</​code>​ 
 +<​code>​
 C_MILLE C_MILLE
 CHLOE CHLOE
Ligne 283: Ligne 286:
 Extraire une portion de texte avec la fonction substr : Extraire une portion de texte avec la fonction substr :
 <code user> <code user>
-awk '{ print $1, substr($1,​2,​3) }' file.txt +awk '{ print $1, substr($1,​2,​3) }' file.txt</​code>​ 
 +<​code>​
 Nom om Nom om
 --------------------------------------- --- --------------------------------------- ---
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>​
  
 <code bash> <code bash>
-awk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 Nom;​Age;​nom_Age Nom;​Age;​nom_Age
 ---------------------------------------;;​---_ ---------------------------------------;;​---_
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>​
  
 <code user> <code user>
-nawk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 CAMILLE,​primaire CAMILLE,​primaire
 CHLOE,​college CHLOE,​college
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>​
  
 <code user> <code user>
-awk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 CAMILLE ​  ​....... CAMILLE ​  ​.......
 CHLOE     ​............ CHLOE     ​............
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>​
  
 <code user> <code user>
-awk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 CAMILLE ​  ​....... CAMILLE ​  ​.......
 CHLOE     ​............ CHLOE     ​............
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>​
  
 <code user> <code user>
-awk -f prog.awk file.txt +awk -f prog.awk file.txt</​code>​ 
 +<​code>​
 F : Moy : 9 ans nb : 3 F : Moy : 9 ans nb : 3
 M : Moy : 7 ans nb : 3</​code>​ M : Moy : 7 ans nb : 3</​code>​
doc/programmation/awk.txt · Dernière modification: 02/06/2015 18:44 par milou

Pied de page des forums

Propulsé par FluxBB