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 [18/10/2012 08:22] smolski |
doc:programmation:awk [18/10/2012 13:22] smolski |
||
---|---|---|---|
Ligne 39: | Ligne 39: | ||
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 bash> | <code bash> | ||
- | awk '{ print $1, $2 }' file.txt | + | awk '{ print $1, $2 }' file.txt</code> |
+ | <code> | ||
Nom Genre | Nom Genre | ||
--------------------------------------- | --------------------------------------- | ||
Ligne 63: | Ligne 64: | ||
Retrouver les lignes qui contiennent CAMILLE : | Retrouver les lignes qui contiennent CAMILLE : | ||
<code bash> | <code bash> | ||
- | 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 71: | Ligne 73: | ||
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 bash> | <code bash> | ||
- | 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 79: | Ligne 82: | ||
Pour récupérer les lignes de CL à E, tapez : | Pour récupérer les lignes de CL à E, tapez : | ||
<code bash> | <code bash> | ||
- | 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 94: | Ligne 98: | ||
<code bash> | <code bash> | ||
- | 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 109: | Ligne 114: | ||
* OFS : Séparateur de champ en sortie (par défaut : espace). | * OFS : Séparateur de champ en sortie (par défaut : espace). | ||
<code bash> | <code bash> | ||
- | 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 123: | Ligne 129: | ||
cat > prog.awk <<EOS | cat > prog.awk <<EOS | ||
/^CL/,/^E/ { | /^CL/,/^E/ { | ||
- | print NR, $0 | + | print NR, \$0 |
} | } | ||
EOS</code> | EOS</code> | ||
Ligne 129: | Ligne 135: | ||
Puis interprété grâce à l'option -f : | Puis interprété grâce à l'option -f : | ||
<code bash> | <code bash> | ||
- | 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 157: | Ligne 164: | ||
Donne : | Donne : | ||
<code bash> | <code bash> | ||
- | 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 172: | Ligne 180: | ||
} | } | ||
{ | { | ||
- | print $1, $3 | + | print \$1, $3 |
} | } | ||
END { | END { | ||
Ligne 181: | Ligne 189: | ||
<code bash> | <code bash> | ||
- | awk -f prog.awk file.txt | + | awk -f prog.awk file.txt</code> |
+ | <code> | ||
Nom;Age | Nom;Age | ||
---------------------------------------; | ---------------------------------------; | ||
Ligne 197: | Ligne 205: | ||
- | ==== Titre ==== | + | ===== Fonctions ===== |
+ | |||
+ | Le parseur awk offre beaucoup de fonctions internes très utiles pour traiter les données. \\ | ||
+ | Consulter les manuels de l'utilitaire awk pour la liste complète des fonctions internes, en voici une liste partielle : | ||
+ | |||
+ | ==== toupper tolower ==== | ||
+ | |||
+ | Convertir du texte en majuscules ou en minuscules avec les fonctions toupper et tolower | ||
+ | <code bash> | ||
+ | awk '/THEO/ { print $1, tolower($1) }' file.txt</code> | ||
+ | <code> | ||
+ | THEO theo</code> | ||
+ | |||
+ | ==== int ==== | ||
+ | |||
+ | Convertir une valeur en entier avec la fonction **int** : | ||
+ | <code bash> | ||
+ | awk '/CHLOE/ { print $3, int($3/5)}' file.txt</code> | ||
+ | <code> | ||
+ | 12 2</code> | ||
+ | |||
+ | ==== printf ==== | ||
+ | |||
+ | La fonction printf avec awk fonctionne comme la fonction printf en C afin de formater la sortie : | ||
+ | <code bash> | ||
+ | awk 'NR > 2 { printf "%10s %02d %-10s\n", $1,$3, $1}' file.txt</code> | ||
+ | <code> | ||
+ | CAMILLE 07 CAMILLE | ||
+ | CHLOE 12 CHLOE | ||
+ | CLARA 11 CLARA | ||
+ | CLEMENT 07 CLEMENT | ||
+ | EMMA 06 EMMA | ||
+ | THEO 08 THEO </code> | ||
+ | |||
+ | ==== length ==== | ||
+ | |||
+ | Afficher la taille d'une chaîne de caractères avec la fonction length : | ||
+ | <code bash> | ||
+ | awk '/CLEM/ { print $1, length($1) }' file.txt</code> | ||
+ | <code> | ||
+ | CLEMENT 7</code> | ||
+ | |||
+ | ==== 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 bash> | ||
+ | awk 'NR >2 { print $1, match($1,"A")}' file.txt</code> | ||
+ | <code> | ||
+ | CAMILLE 2 | ||
+ | CHLOE 0 | ||
+ | CLARA 3 | ||
+ | CLEMENT 0 | ||
+ | EMMA 4 | ||
+ | THEO 0</code> | ||
+ | |||
+ | ==== gsub ==== | ||
+ | |||
+ | Remplacer des chaînes de caractères avec la fonction gsub : | ||
+ | <code bash> | ||
+ | awk 'NR >2 { gsub("A","_",$1) ; print $1 }' file.txt</code> | ||
+ | <code> | ||
+ | C_MILLE | ||
+ | CHLOE | ||
+ | CL_R_ | ||
+ | CLEMENT | ||
+ | EMM_ | ||
+ | THEO</code> | ||
+ | |||
+ | ==== substr ==== | ||
+ | |||
+ | Extraire une portion de texte avec la fonction substr : | ||
+ | <code bash> | ||
+ | awk '{ print $1, substr($1,2,3) }' file.txt</code> | ||
+ | <code> | ||
+ | Nom om | ||
+ | --------------------------------------- --- | ||
+ | CAMILLE AMI | ||
+ | CHLOE HLO | ||
+ | CLARA LAR | ||
+ | CLEMENT LEM | ||
+ | EMMA MMA | ||
+ | THEO HEO</code> | ||
+ | |||
+ | ==== Fonctions utilisateur ==== | ||
+ | |||
+ | 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 bash> | ||
+ | cat > prog.awk <<EOS | ||
+ | function gentag(nom,age) { | ||
+ | tmp=tolower(substr(nom,1,3)) | ||
+ | return tmp "_" age | ||
+ | } | ||
+ | |||
+ | BEGIN { | ||
+ | FS=" " | ||
+ | OFS=";" | ||
+ | } | ||
+ | |||
+ | { | ||
+ | print \$1, \$3, gentag(\$1,\$3) | ||
+ | } | ||
+ | |||
+ | END { | ||
+ | print NR , "lines" | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | <code bash> | ||
+ | awk -f prog.awk file.txt | ||
+ | EOS | ||
+ | <code> | ||
+ | Nom;Age;nom_Age | ||
+ | ---------------------------------------;;---_ | ||
+ | CAMILLE;7;cam_7 | ||
+ | CHLOE;12;chl_12 | ||
+ | CLARA;11;cla_11 | ||
+ | CLEMENT;7;cle_7 | ||
+ | EMMA;6;emm_6 | ||
+ | THEO;8;the_8 | ||
+ | 8;lines</code> | ||
+ | |||
- | <note warning>**ATTENTION** ! Vérifiez toujours l'écriture de chaque script donné ici avant de l'appliquer !</note> | ||
//À suivre...// **Jojo** ;-) | //À suivre...// **Jojo** ;-) |