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 04:45]
smolski
doc:programmation:awk [18/10/2012 07:38]
smolski
Ligne 1: Ligne 1:
 ====== awk ====== ====== awk ======
  
-(//non testé// - **smolski** 18/10/2012) Le retour sur le forum est ici : +(//testé// - **smolski** 18/10/2012) Le retour sur le forum est ici : 
-  * [[//url// | Lien vers le forum concernant ce tuto]] N'​hésitez pas à y faire par de vos remarques, succès, améliorations ou échecs ! +  * [[http://debian-facile.org/viewtopic.php?​id=6057 ​| Lien vers le forum concernant ce tuto]] N'​hésitez pas à y faire par de vos remarques, succès, améliorations ou échecs ! 
-  * Objet : awk - awk+  * Objet : awk
   * Niveau requis : AVISÉ   * Niveau requis : AVISÉ
-  * Commentaires : // Cet utilitaire a été créÉ ​dans le but de remplacer les commandes [[commande:​grep]] et [[commande:​sed]]. //+  * Commentaires : // Cet utilitaire a été créé ​dans le but de remplacer les commandes [[commande:​grep]] et [[commande:​sed]]. //
   * Débutant, à savoir :   * Débutant, à savoir :
 [[manuel:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) [[manuel:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
Ligne 66: Ligne 66:
 CAMILLE 7 M</​code>​ CAMILLE 7 M</​code>​
  
 +**Nota** : \\
 L'​ordre des colonnes a été modifié pour l'​exemple. L'​ordre des colonnes a été modifié pour l'​exemple.
  
Ligne 82: Ligne 83:
 CLEMENT M 7 CLEMENT M 7
 EMMA F 6</​code>​ EMMA F 6</​code>​
 +
 +==== Variables awk ====
 +
 +awk fournit des variables utiles qui peuvent être utilisées, affichées, calculées ou assignées.
 +
 +=== Variable NR NF ===
 +
 +  * NR : nombre d'​enregistrements (numéro de ligne).
 +  * NF : nombre de champs (nombre de colonnes).
 +
 +<code bash>
 +awk '{ print NR, NF, $0 }' file.txt
 +1 3 Nom         ​Genre ​          Age
 +2 1 ---------------------------------------
 +3 3 CAMILLE ​            ​M ​              7
 +4 3 CHLOE               ​F ​              12
 +5 3 CLARA               ​F ​              11
 +6 3 CLEMENT ​            ​M ​              7
 +7 3 EMMA                F               6
 +8 3 THEO                M               ​8</​code>​
 +
 +=== Variable FS OFS ===
 +
 +  * FS : Séparateur de champ (par défaut : espace/​tabulation).
 +  * OFS : Séparateur de champ en sortie (par défaut : espace).
 +<code bash>
 +awk '/​CAMILLE/​ { OFS=","​ ; print $2,$1 }' file.txt
 +M,​CAMILLE</​code>​
 +
 +<​note>​À noter le caractère ";"​ pour séparer les instructions dans la même ligne et la façon dont on assigne une valeur à une variable (OFS=","​).</​note>​
 +
 +==== Scripts awk ====
 +
 +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
 +<code bash>
 +cat > prog.awk
 +/^CL/,/^E/ { 
 +     print NR, $0 
 +}</​code>​
 +
 +Puis interprété grâce à l'​option -f :
 +<code bash>
 +awk -f prog.awk file.txt
 +5 CLARA F 11
 +6 CLEMENT M 7
 +7 EMMA F 6</​code>​
 +
 +==== Pré et Post opérations ====
 +
 +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 bash>
 +cat 
 +BEGIN {
 +        action
 +}
 +
 +/​filter/,/​filter/​ { action }
 +
 +{ action}
 +
 +END {
 +        action
 +}
 +
 +Les blocs BEGIN et END ne sont pas obligatoires. Il peut y avoir un bloc BEGIN sans bloc END, un bloc END sans bloc BEGIN, ou aucun de ces 2 blocs.
 +
 +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 :
 +
 +shell> cat prog.awk
 +
 +BEGIN { 
 +        FS=" "
 +        OFS=";"​
 +}
 +
 +        print $1, $3 
 +}
 +END { 
 +        printf "\nThe file has %d lines\n",​ NR 
 +}
 +
 +shell> nawk -f prog.awk file.txt
 +
 +Nom;Age
 +---------------------------------------;​
 +CAMILLE;7
 +CHLOE;12
 +CLARA;11
 +CLEMENT;7
 +EMMA;6
 +THEO;8
 +
 +The file has 8 lines 
 +==== Titre ====
 +
 +//À suivre...// **Jojo** ;-)
doc/programmation/awk.txt · Dernière modification: 02/06/2015 18:44 par milou

Pied de page des forums

Propulsé par FluxBB