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 | ||
doc:programmation:awk [28/10/2013 10:31] captnfab [awk] |
doc:programmation:awk [02/06/2015 18:44] milou [Programmation] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
* Objet : awk | * Objet : awk | ||
- | * Niveau requis : {{tag>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]]. // | ||
- | * Suivi : {{tag>à-compléter}} | ||
* Débutant, à savoir : [[: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) | + | * Suivi : {{tag>}} |
- | * Testé par **smolski** le 28/10/2013) | + | * Création par [[user>smolski]] 18/10/2012) |
- | * Testé par **MicP** 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 41: | 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 49: | Ligne 46: | ||
CLEMENT M | CLEMENT M | ||
EMMA F | EMMA F | ||
- | THEO M</code> | + | THEO M</file> |
<note pip> | <note pip> | ||
Ligne 69: | 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 78: | 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 87: | 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 103: | 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 111: | 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 119: | 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 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> | <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> | ||
Ligne 136: | 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 ==== | ||
Ligne 162: | 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 186: | 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 196: | 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 ! //Bis.// :-P</note> | <note warning>**ATTENTION** ! Vérifiez toujours l'écriture de chaque script donné ici avant de l'appliquer ! //Bis.// :-P</note> | ||
Ligne 211: | Ligne 208: | ||
<code user> | <code user> | ||
awk '/THEO/ { print $1, tolower($1) }' file.txt</code> | awk '/THEO/ { print $1, tolower($1) }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
- | THEO theo</code> | + | THEO theo</file> |
==== int ==== | ==== int ==== | ||
Ligne 219: | Ligne 216: | ||
<code user> | <code user> | ||
awk '/CHLOE/ { print $3, int($3/5)}' file.txt</code> | awk '/CHLOE/ { print $3, int($3/5)}' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
- | 12 2</code> | + | 12 2</file> |
==== printf ==== | ==== printf ==== | ||
Ligne 226: | Ligne 223: | ||
La fonction printf avec awk fonctionne comme la fonction printf en C afin de formater la sortie : | La fonction printf avec awk fonctionne comme la fonction printf en C afin de formater la sortie : | ||
<code user> | <code user> | ||
- | awk 'NR > 2 { printf "%10s %02d %-10s\n", $1,$3, $1}' file.txt | + | awk 'NR > 2 { printf "%10s %02d %-10s\n", $1,$3, $1}' file.txt</code> |
+ | <file config retour de la commande> | ||
CAMILLE 07 CAMILLE | CAMILLE 07 CAMILLE | ||
CHLOE 12 CHLOE | CHLOE 12 CHLOE | ||
Ligne 233: | Ligne 230: | ||
CLEMENT 07 CLEMENT | CLEMENT 07 CLEMENT | ||
EMMA 06 EMMA | EMMA 06 EMMA | ||
- | THEO 08 THEO </code> | + | THEO 08 THEO </file> |
==== length ==== | ==== length ==== | ||
Ligne 240: | Ligne 237: | ||
<code user> | <code user> | ||
awk '/CLEM/ { print $1, length($1) }' file.txt</code> | awk '/CLEM/ { print $1, length($1) }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
- | CLEMENT 7</code> | + | CLEMENT 7</file> |
==== match ==== | ==== match ==== | ||
Ligne 248: | Ligne 245: | ||
<code user> | <code user> | ||
awk 'NR >2 { print $1, match($1,"A")}' file.txt</code> | awk 'NR >2 { print $1, match($1,"A")}' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
CAMILLE 2 | CAMILLE 2 | ||
CHLOE 0 | CHLOE 0 | ||
Ligne 254: | Ligne 251: | ||
CLEMENT 0 | CLEMENT 0 | ||
EMMA 4 | EMMA 4 | ||
- | THEO 0</code> | + | THEO 0</file> |
==== gsub ==== | ==== gsub ==== | ||
Ligne 261: | Ligne 258: | ||
<code user> | <code user> | ||
awk 'NR >2 { gsub("A","_",$1) ; print $1 }' file.txt</code> | awk 'NR >2 { gsub("A","_",$1) ; print $1 }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
C_MILLE | C_MILLE | ||
CHLOE | CHLOE | ||
Ligne 267: | Ligne 264: | ||
CLEMENT | CLEMENT | ||
EMM_ | EMM_ | ||
- | THEO</code> | + | THEO</file> |
==== substr ==== | ==== substr ==== | ||
Ligne 274: | Ligne 271: | ||
<code user> | <code user> | ||
awk '{ print $1, substr($1,2,3) }' file.txt</code> | awk '{ print $1, substr($1,2,3) }' file.txt</code> | ||
- | <code> | + | <file config retour de la commande> |
Nom om | Nom om | ||
--------------------------------------- --- | --------------------------------------- --- | ||
Ligne 282: | Ligne 279: | ||
CLEMENT LEM | CLEMENT LEM | ||
EMMA MMA | EMMA MMA | ||
- | THEO HEO</code> | + | THEO HEO</file> |
==== Fonctions utilisateur ==== | ==== Fonctions utilisateur ==== | ||
Ligne 309: | Ligne 306: | ||
<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 | Nom;Age;nom_Age | ||
---------------------------------------;;---_ | ---------------------------------------;;---_ | ||
Ligne 318: | Ligne 315: | ||
EMMA;6;emm_6 | EMMA;6;emm_6 | ||
THEO;8;the_8 | THEO;8;the_8 | ||
- | 8;lines</code> | + | 8;lines</file> |
===== Programmation ===== | ===== Programmation ===== | ||
Ligne 345: | Ligne 342: | ||
<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> |
CAMILLE,primaire | CAMILLE,primaire | ||
CHLOE,college | CHLOE,college | ||
Ligne 351: | Ligne 348: | ||
CLEMENT,primaire | CLEMENT,primaire | ||
EMMA,primaire | EMMA,primaire | ||
- | THEO,primaire</code> | + | THEO,primaire</file> |
<note tip>Remarquer la façon dont l'entête est écartée : NR <=2 { next }</note> | <note tip>Remarquer la façon dont l'entête est écartée : NR <=2 { next }</note> | ||
Ligne 373: | Ligne 370: | ||
<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> |
CAMILLE ....... | CAMILLE ....... | ||
CHLOE ............ | CHLOE ............ | ||
Ligne 379: | Ligne 376: | ||
CLEMENT ....... | CLEMENT ....... | ||
EMMA ...... | EMMA ...... | ||
- | THEO ........</code> | + | THEO ........</file> |
==== Itérations ==== | ==== Itérations ==== | ||
Ligne 397: | Ligne 394: | ||
<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> |
CAMILLE ....... | CAMILLE ....... | ||
CHLOE ............ | CHLOE ............ | ||
Ligne 403: | Ligne 400: | ||
CLEMENT ....... | CLEMENT ....... | ||
EMMA ...... | EMMA ...... | ||
- | THEO ........</code> | + | THEO ........</file> |
==== Tableaux (Arrays) ==== | ==== Tableaux (Arrays) ==== | ||
Ligne 428: | Ligne 425: | ||
<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> |
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</file> |
<note tip>Remarquer comment les 2 tableaux sont remplis et traités à la fin.</note> | <note tip>Remarquer comment les 2 tableaux sont remplis et traités à la fin.</note> |