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
utilisateurs:hypathie:tutos:awk-vocabulaire [05/08/2014 15:56]
Hypathie [Le fonctionnement discriminatoire d'awk]
utilisateurs:hypathie:tutos:awk-vocabulaire [12/08/2014 15:18] (Version actuelle)
Hypathie [Déterminer l'instruction par une condition]
Ligne 245: Ligne 245:
  
 > Le fichier plus petit selon NR d'​abord,​ sinon il affiche les lignes supérieures,​ c'​est-à-dire celles à partir de l'​enregistrement 5 pour chaque fichier ! > Le fichier plus petit selon NR d'​abord,​ sinon il affiche les lignes supérieures,​ c'​est-à-dire celles à partir de l'​enregistrement 5 pour chaque fichier !
 +
 +====Les autres variables prédéfinies ====
 +===Celles en mémoire dès le lancement de la commande ===
 +Voici les variables internes du langage awk présentes en mémoire dès le lancement de la commande.
 +
 +^Variables ^Significations ^Valeurs par défaut ^
 +|ARGC |Nombre d'​arguments de la ligne de commande |- |
 +|ARGV |Tableau des arguments de la ligne de commande|- |
 +|FS |Séparateur de champs en entrée|"​ "|
 +|NF |Nombre de champs de l'​enregistrement courant|-|
 +|OFMT |Format de sortie des nombres|"​%.6g"​|
 +|OFS |Séparateur de champs pour la sortie|"​ "|
 +|ORS |Séparateur d'​enregistrement pour la sortie|"​\n"​|
 +|RLENGTH |Longueur de la chaîne trouvée|-|
 +|RS |Séparateur d'​enregistrement en entrée|"​\n"​|
 +|RSTART |Positionnée par la fonction match :début de la chaîne trouvée|-|
 +|SUBSEP |Séparateur des éléments dans un tableau|"​\034"​|
 +
 +===Celles initialisées lors du traitement d'une ligne ===
 +
 +Les enregistrements sont traités successivement.\\ ​
 +L'​enregistrement est automatiquement découpé en champs et un certain nombre de variables internes awk sont alors initialisées.\\ ​
 +Les voici :
 +
 +^ ^ ^
 +|$0|Valeur de l'​enregistrement courant|
 +|NF |Nombre de champs de l'​enregistrement courant|
 +|$1 $2 ... $NF|$1 : champ n°1\\ $2 champ n°2\\ $NF : valeur du dernier champ|
 +|NR  |Indice de l'​enregistrement courant\\ (NR vaut 1 quand la première ligne est lu, et s'​incrémente à chaque enregistrement.)|
 +|FNR|Indice de l'​enregistrement courant relatif au fichier en cours de traitement|
 +|FILENAME |Nom du fichier en cours de traitement|
 +
 +
 +
  
 ===="​Fichier1"​ "​Fichier2"​ ==== ===="​Fichier1"​ "​Fichier2"​ ====
Ligne 274: Ligne 308:
  
 =====Utilisation simple et notion de "​programme"​ awk===== =====Utilisation simple et notion de "​programme"​ awk=====
-__//​Quand ​le programme ​est explicite//​__+__//​Quand ​un programme explicite ​est ajouté//__
  
   awk '​Programme'​ Fichier-1 Fichier-2 ..... Fichier-n   awk '​Programme'​ Fichier-1 Fichier-2 ..... Fichier-n
Ligne 280: Ligne 314:
 <note tip> <note tip>
 __**Le "​programme"​ :**__ __**Le "​programme"​ :**__
 +
 +Jusqu'​à présent on a vu que **''​Programme''​** pouvait être simplement constitué d'une condition et d'une variable prédéfinie :
 +
 +  awk '​[condition]'​ Fichier-1 Fichier-2 ... Fichier-n
 +
 +La plupart du temps awk est utilisé avec une instruction conditionnée ou non.\\ ​
 +Le programme devient alors :
 +
 +  awk '​[condition]{instruction}'​ Fichier-1 Fichier-2 ... Fichier-n
 +
  
   * Le "​Programme"​ peut aussi être constitué par une ou plusieurs instructions.   * Le "​Programme"​ peut aussi être constitué par une ou plusieurs instructions.
Ligne 285: Ligne 329:
   * Quand il y en a plusieurs, chaque instruction permet une action particulière sur le ou des fichier(s), ou encore sur les données du flux d'​entrée. ​   * Quand il y en a plusieurs, chaque instruction permet une action particulière sur le ou des fichier(s), ou encore sur les données du flux d'​entrée. ​
  
-  *Avec awk, on ne parle pas de commandes internes à awk.\\ Une instruction ​est constituée par des fonctions prédéfinies,​ ou créées par l'​utilisateur.\\ ​+  * Avec awk, on ne parle pas de commandes internes à awk.\\ Une instruction ​peut être constituée par des fonctions prédéfinies,​ ou créées par l'​utilisateur, par des variables prédéfinies ou crées par l'​utilisateur.\\  
 + 
 +  * Chaque instruction du programme peut être [[utilisateurs:​hypathie:​tutos:​awk-vocabulaire?&#​determiner-l-instruction-par-une-condition|conditionnée]].\\ 
  
-  * Chaque fonction porte sur une variable prédéfinie ou créée par l'utilisateur.\\ +  * Il est possible de conditionner les instructions au moyen d'un test "​if-else"​ et maîtriser le déroulement d'une instruction au moyen des boucles "​while"​ et "​for"​.\\  
  
-  * Le programme ainsi constitué de fonction et de variable, peut être [[utilisateurs:​hypathie:​tutos:​awk-vocabulaire?&#​determiner-l-instruction-par-une-condition|conditionné]].\\ ​ 
  
-//La création de fonctions et de variables ​relève ​de l'​utilisation avancée de awk qui, plus qu'une simple commande, est un langage de programmation.//​\\ ​+//La création de fonctions et de variables, ainsi que l'​utilisation des tests et des boucles, relèvent ​de l'​utilisation avancée de awk qui, plus qu'une simple commande, est un langage de programmation.//​\\ ​
 //Cela se fait dans un script awk.//​\\ ​ //Cela se fait dans un script awk.//​\\ ​
    
Ligne 607: Ligne 652:
 =====Déterminer l'​instruction par une condition ===== =====Déterminer l'​instruction par une condition =====
 <note tip> <note tip>
-__Un programme awk se présente toujours ​ainsi__ ​:+__Il a été vu__ : 
 + 
 +  * qu'​un ​programme awk se présente toujours ​ainsi :
  
 <​code>​ <​code>​
Ligne 615: Ligne 662:
 </​code>​ </​code>​
  
-  * Une **''​condition''​** porte exclusivement sur une ligne du fichier d’entrée s'il en est précisé un, ou sur l’entrée standard (stdin), si aucun fichier n’est indiqué.+  * qu'​une ​**''​condition''​** porte exclusivement sur une ligne du fichier d’entrée s'il en est précisé un, ou sur l’entrée standard (stdin), si aucun fichier n’est indiqué.
  
-  * Une action ne s’exécutera que si la condition est validée.+  * qu'​une ​action ne s’exécutera que si la condition est validée.
  
-  * Il y a différents ​modèles ​de "​condition"​+  * à ces sujets, quelques types de condition. 
 + 
 +__Mais il y a différentes types de conditions__.  
 + 
 +  * On désigne ces différents ​types de condition ​de "**modèles de condition**"
 +  * Il y a quatre sorte de modèles de condition
  
 ^ ^ ^ ^ ^ ^
Ligne 629: Ligne 681:
 |intervalle | NR==5,​NR==10 |match les lignes de 5 à 10 | |intervalle | NR==5,​NR==10 |match les lignes de 5 à 10 |
  
 +  * Tous ces modèles, bien que distingués les uns des autres, ont une //forme// en commun : qu'​elle est-elle ; qu'​est-ce qui fait que chacun "​modèle de condition"​ est condition ?
 </​note>​ </​note>​
  
Ligne 712: Ligne 764:
 ===Une ER en correspondance comme condition === ===Une ER en correspondance comme condition ===
 <code user> <code user>
-awk '$1 ~ /[:aplha:]*/{print NR,​$1,​$2,​$3,​$4,​$5,​$6,​$7}'​ fichier-awk.txt+awk '$1 ~ /[[:alpha:]]*/{print NR,​$1,​$2,​$3,​$4,​$5,​$6,​$7}'​ fichier-awk.txt
 </​code>​ </​code>​
  
 >Ici la condition est :  **''​ '$1 ~ /<​nowiki>​[:​aplha:​]</​nowiki>​*/​ ''​** . >Ici la condition est :  **''​ '$1 ~ /<​nowiki>​[:​aplha:​]</​nowiki>​*/​ ''​** .
 > Elle est constituée par l'​équivalence (**''​~''​**) entre le champ 1 ($1) et une expression rationnelles :  > Elle est constituée par l'​équivalence (**''​~''​**) entre le champ 1 ($1) et une expression rationnelles : 
-> la classe **''<​nowiki>​[:​alpha:​]</​nowiki>''​** (minuscule ou majuscule), zéro ou plusieurs fois (**''​*''​**).+> la classe **''<​nowiki>​[[:alpha:]]</​nowiki>''​** (minuscule ou majuscule), zéro ou plusieurs fois (**''​*''​**).
 > //(Les expressions rationnelles sont entourées de slashs : /ER/)// > //(Les expressions rationnelles sont entourées de slashs : /ER/)//
  
Ligne 860: Ligne 912:
 **Autrement dit, la //forme// d'une condition est de déterminer l'​action en fonction d'une localisation,​ et cela //a priori// de l'​explicitation de la condition.** **Autrement dit, la //forme// d'une condition est de déterminer l'​action en fonction d'une localisation,​ et cela //a priori// de l'​explicitation de la condition.**
  
-  *  “BEGIN” et “END” font partie des “modèles"​ ; comme les autres “conditions”,​ ils contrôlent l'​exécution des actions.\\ Mais contrairement aux autres ​“patterns, ils ne conditionnent ​pas (ne “matchent” pas)l'​exécution du programme en fonction ​de la correspondance précisée par la condition.\\ ​Ils conditionnent ​le fait que l'​action n'ait lieu qu'une seule fois.\\ ​+  * “BEGIN” et “END” font partie des “modèles"​ ; comme les autres “conditions”,​ ils contrôlent l'​exécution des actions.\\ Mais contrairement aux autres ​modèles, ils ne déterminent ​pas l'​exécution du programme en fonction ​d'​une ​condition ​qui, par correspondance,​ détermine l'​action relativement à une partie du fichier.\\ __Ils sont "​condition"​ dans le sens où ils "​modélisent"​ l'​action. Cette modalité impose ​que l'​action n'ait lieu qu'une seule fois, et que le résultat de cette action s'​affiche en lieu particulier par rapport au résultat de l'​ensemble du programme.__\\ 
  
-  *  "​BEGIN" ​et "END" ​s'​utilise en général dans des scripts.\\ Voir [[utilisateurs:​hypathie:​tutos:​awk-vocabulaire?&#​notion-de-programme-awk-et-utilisation-de-scripts-rudimentaires|notion de programme awk et utilisation de script rudimentaire]].+  * BEGIN et END ne se composent pas avec les autres modèles.\\  
 + 
 +  * Ils ne sont pas obligatoires. 
 + 
 +  * Ils s'​utilise en général dans des scripts.\\ Voir [[utilisateurs:​hypathie:​tutos:​awk-vocabulaire?&#​notion-de-programme-awk-et-utilisation-de-scripts-rudimentaires|notion de programme awk et utilisation de script rudimentaire]].
  
 </​note>​ </​note>​
  
 ====BEGIN et END ==== ====BEGIN et END ====
-BEGIN et END ne se composent pas avec les autres modèles.\\ ​ 
-Mais on peut insérer tous les autres modèles (expression relationnelle,​ ER, composée d'ER, intervalle entre BEGIN et END.\\ ​ 
-Ils ne sont pas obligatoires. 
- 
-  '​BEGIN{instructions} critères END{instructions}'​ 
- 
  
 ===Notion de blocs === ===Notion de blocs ===
Ligne 888: Ligne 938:
  
 À ce programme qui est la partie centrale, il est possible d'​ajouter un début (BEGIN) et une fin (END) de programme. À ce programme qui est la partie centrale, il est possible d'​ajouter un début (BEGIN) et une fin (END) de programme.
 +
 +<​code>​
 +BEGIN {
 +    instructions
 +}
 +Condition {
 +    Action
 +  }
 +...
 +Condition {
 +    Action
 +}
 +END {
 +    instructions
 +}
 +
 +</​code>​
 +
  
 <note tip> <note tip>
-  * "Action" : +  * "Le programme central" : 
-Awk rappelle ​le programme de "l'​action" ​(centrale et composée d'une ou plusieurs série(s) de action(s), conditionnée(s) ou non) autant de fois qu'il y a d'​enregistrement(s).\\ ​+Awk rappelle ​les "actions" ​du programme central ​autant de fois qu'il y a d'​enregistrement(s).\\ ​
 Par exemple, appliqué à un fichier de 4 lignes, le programme va être appelé quatre fois((Il y a un ensemble de variables qui permettent d'​accéder à l'​enregistrement (voir plus bas).)).\\ ​ Par exemple, appliqué à un fichier de 4 lignes, le programme va être appelé quatre fois((Il y a un ensemble de variables qui permettent d'​accéder à l'​enregistrement (voir plus bas).)).\\ ​
 À chaque passage, c'est un nouvel enregistrement (une nouvelle ligne) qui est traité. À chaque passage, c'est un nouvel enregistrement (une nouvelle ligne) qui est traité.
  
   * "​BEGIN"​ :   * "​BEGIN"​ :
- 
-  BEGIN { 
-      instructions 
-  } 
- 
 Le bloc "​BEGIN"​ est exécuté une fois au début, __avant__ le traitement des données.\\ ​ Le bloc "​BEGIN"​ est exécuté une fois au début, __avant__ le traitement des données.\\ ​
 Il peut être constitué de plusieurs instructions.\\ ​ Il peut être constitué de plusieurs instructions.\\ ​
  
   * "​END"​ :   * "​END"​ :
- 
-  END { 
-      instructions 
-  } 
  
 Le bloc "​END"​ est exécuté une fois à la fin, __après__ le traitement des données.\\ ​ Le bloc "​END"​ est exécuté une fois à la fin, __après__ le traitement des données.\\ ​
Ligne 964: Ligne 1023:
 </​code>​ </​code>​
  
-===Exemples ​de blocs de début et de fin === +===Exemple ​de blocs de début et de fin ===
  
   *Soit le script "​begin-end.awk"​   *Soit le script "​begin-end.awk"​
utilisateurs/hypathie/tutos/awk-vocabulaire.1407246961.txt.gz · Dernière modification: 05/08/2014 15:56 par Hypathie

Pied de page des forums

Propulsé par FluxBB