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 →
Ci-dessous, les différences entre deux révisions de la page.
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 18:21] smolski [awk] |
doc:programmation:awk [02/06/2015 18:36] milou [Exercices] |
||
---|---|---|---|
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>débutant 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 : | + | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) |
- | [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | + | * Suivi : {{tag>}} |
- | * Création par **smolski** 18/10/2012) | + | * Création par [[user>smolski]] 18/10/2012) |
- | * Testé par **smolski** le 28/10/2013) | + | * Testé par **[[user>smolski]]** le 28/10/2013) |
+ | * Testé par **[[user>MicP]]** 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 !)) | ||
- | === Nota === | ||
- | |||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== Introduction ===== | ===== Introduction ===== | ||
Ligne 42: | Ligne 38: | ||
<code user> | <code user> | ||
awk '{ print $1, $2 }' file.txt</code> | awk '{ print $1, $2 }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
Nom Genre | Nom Genre | ||
--------------------------------------- | --------------------------------------- | ||
Ligne 50: | Ligne 46: | ||
CLEMENT M | CLEMENT M | ||
EMMA F | EMMA F | ||
- | THEO M</code> | + | THEO M</file> |
- | <note> | + | <note pip> |
* $1 correspond à la première colonne, $2 la seconde, $3 la troisième... | * $1 correspond à la première colonne, $2 la seconde, $3 la troisième... | ||
* $0 correspond à la ligne entière | * $0 correspond à la ligne entière | ||
Ligne 58: | Ligne 54: | ||
Dans le format de la sortie, les tabulations sont remplacées par un espace qui est le séparateur de sortie par défaut. | Dans le format de la sortie, les tabulations sont remplacées par un espace qui est le séparateur de sortie par défaut. | ||
- | <note important>Par défaut, les espaces et tabulations contigüs sont considérés comme un séparateur unique. Il s'agit de la seule exception.</note> | + | <note important>Par défaut, les espaces et tabulations contigües sont considérées comme un séparateur unique. Il s'agit de la seule exception.</note> |
==== Filtres et regexp ==== | ==== Filtres et regexp ==== | ||
+ | |||
+ | <note warning>**ATTENTION** ! Vérifiez toujours l'écriture de chaque script donné ici avant de l'appliquer ! \\ | ||
+ | Lien utile : **[[doc:programmation:shell:regexp | Les Regexp.]]** //Et c'est pas la peine de faire Ouch..! Tuto inévitable à ce niveau.// :-P</note> | ||
Précédemment, des colonnes ont été filtrées, mais awk est aussi principalement utilisé pour filtrer des lignes grâce aux syntaxes des expressions régulières. | Précédemment, des colonnes ont été filtrées, mais awk est aussi principalement utilisé pour filtrer des lignes grâce aux syntaxes des expressions régulières. | ||
Ligne 67: | Ligne 66: | ||
<code user> | <code user> | ||
awk '/CAMILLE/ { print $1, $3, $2 }' file.txt</code> | awk '/CAMILLE/ { print $1, $3, $2 }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
- | CAMILLE 7 M</code> | + | CAMILLE 7 M</file> |
**Nota** : \\ | **Nota** : \\ | ||
Ligne 76: | Ligne 75: | ||
<code user> | <code user> | ||
awk '/^C.*[AO]/ { print $1, $3, $2 }' file.txt</code> | awk '/^C.*[AO]/ { print $1, $3, $2 }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
CAMILLE 7 M | CAMILLE 7 M | ||
CHLOE 12 F | CHLOE 12 F | ||
- | CLARA 11 F</code> | + | CLARA 11 F</file> |
awk est également très utile et puissant pour gérer des filtres sur des paragraphes. \\ | awk est également très utile et puissant pour gérer des filtres sur des paragraphes. \\ | ||
Ligne 85: | Ligne 84: | ||
<code user> | <code user> | ||
awk '/^CL/,/^E/ { print $0 }' file.txt</code> | awk '/^CL/,/^E/ { print $0 }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
CLARA F 11 | CLARA F 11 | ||
CLEMENT M 7 | CLEMENT M 7 | ||
- | EMMA F 6</code> | + | EMMA F 6</file> |
==== Variables awk ==== | ==== Variables awk ==== | ||
Ligne 101: | Ligne 100: | ||
<code user> | <code user> | ||
awk '{ print NR, NF, $0 }' file.txt</code> | awk '{ print NR, NF, $0 }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
1 3 Nom Genre Age | 1 3 Nom Genre Age | ||
2 1 --------------------------------------- | 2 1 --------------------------------------- | ||
Ligne 109: | Ligne 108: | ||
6 3 CLEMENT M 7 | 6 3 CLEMENT M 7 | ||
7 3 EMMA F 6 | 7 3 EMMA F 6 | ||
- | 8 3 THEO M 8</code> | + | 8 3 THEO M 8</file> |
=== Variable FS OFS === | === Variable FS OFS === | ||
Ligne 117: | Ligne 116: | ||
<code user> | <code user> | ||
awk '/CAMILLE/ { OFS="," ; print $2,$1 }' file.txt</code> | awk '/CAMILLE/ { OFS="," ; print $2,$1 }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
- | M,CAMILLE</code> | + | M,CAMILLE</file> |
- | <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> | + | <note tip>À 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 ==== | ==== Scripts awk ==== | ||
- | |||
- | <note warning>**ATTENTION** ! Vérifiez toujours l'écriture de chaque script donné ici avant de l'appliquer ! \\ | ||
- | 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 awk prog.awk> | <code awk prog.awk> | ||
/^CL/,/^E/ { | /^CL/,/^E/ { | ||
- | print NR, \$0 | + | print NR, $0 |
} | } | ||
</code> | </code> | ||
Ligne 137: | Ligne 133: | ||
<code user> | <code user> | ||
awk -f prog.awk file.txt</code> | awk -f prog.awk file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
5 CLARA F 11 | 5 CLARA F 11 | ||
6 CLEMENT M 7 | 6 CLEMENT M 7 | ||
- | 7 EMMA F 6</code> | + | 7 EMMA F 6</file> |
==== Pré et Post opérations ==== | ==== Pré et Post opérations ==== | ||
- | |||
- | <note warning>**ATTENTION** ! Vérifiez toujours l'écriture de chaque script donné ici avant de l'appliquer !</note> | ||
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 : | ||
Ligne 165: | Ligne 159: | ||
<code user> | <code user> | ||
awk -f prog.awk file.txt</code> | awk -f prog.awk file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
CLARA F 11 | CLARA F 11 | ||
CLEMENT M 7 | CLEMENT M 7 | ||
- | EMMA F 6</code> | + | EMMA F 6</file> |
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. | 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. | ||
Ligne 189: | Ligne 183: | ||
<code user> | <code user> | ||
awk -f prog.awk file.txt</code> | awk -f prog.awk file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
Nom;Age | Nom;Age | ||
---------------------------------------; | ---------------------------------------; | ||
Ligne 199: | Ligne 193: | ||
THEO;8 | THEO;8 | ||
- | The file has 8 lines </code> | + | The file has 8 lines </file> |
- | <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 ! //Bis.// :-P</note> |