mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
keep introducing comments close to their object
In previous commits, some introducing comments ended just in the line ahead of their example; others did not. For consistency, comments are now back to back with their example.
This commit is contained in:
parent
27f052e68d
commit
7a2f6ddacd
@ -24,14 +24,12 @@ ce qui concerne le traitement de texte simple. Notamment le traitement de ceux
|
|||||||
qui nécessitent de lire des fichiers ligne par ligne ; chaque ligne comportant
|
qui nécessitent de lire des fichiers ligne par ligne ; chaque ligne comportant
|
||||||
des champs séparés par des délimiteur.
|
des champs séparés par des délimiteur.
|
||||||
|
|
||||||
|
|
||||||
```awk
|
```awk
|
||||||
#!/usr/bin/awk -f
|
#!/usr/bin/awk -f
|
||||||
|
|
||||||
# Les commentaires commencent par un #
|
# Les commentaires commencent par un #
|
||||||
|
|
||||||
|
# Les programmes AWK consistent en une collection de règles et d'actions.
|
||||||
# les programmes AWK consistent en une collection de règles et d'actions
|
|
||||||
règle1 { action; }
|
règle1 { action; }
|
||||||
règle2 { action; }
|
règle2 { action; }
|
||||||
|
|
||||||
@ -46,14 +44,14 @@ règle2 { action; }
|
|||||||
# texte. Si vous ne disposez pas de fichiers texte, considérez BEGIN comme le
|
# texte. Si vous ne disposez pas de fichiers texte, considérez BEGIN comme le
|
||||||
# point d’entrée principal du script.
|
# point d’entrée principal du script.
|
||||||
# À l'opposé de BEGIN, il existe la règle END. Cette règle est présente après
|
# À l'opposé de BEGIN, il existe la règle END. Cette règle est présente après
|
||||||
#chaque fin de fichier (EOF : End Of File).
|
# chaque fin de fichier (EOF : End Of File).
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
|
|
||||||
# Les variables sont globales. Pas besoin de les déclarer.
|
# Les variables sont globales. Pas besoin de les déclarer.
|
||||||
count = 0;
|
count = 0;
|
||||||
|
|
||||||
# les opérateurs sont identiques au langage C et aux langages similaires
|
# Les opérateurs sont identiques au langage C et aux langages similaires
|
||||||
# (tels que C#, C++, etc.)
|
# (tels que C#, C++, etc.)
|
||||||
a = count + 1; # addition
|
a = count + 1; # addition
|
||||||
b = count - 1; # soustraction
|
b = count - 1; # soustraction
|
||||||
@ -122,7 +120,6 @@ BEGIN {
|
|||||||
arr[1] = "bar";
|
arr[1] = "bar";
|
||||||
|
|
||||||
# Vous pouvez aussi initialiser un tableau avec la fonction split()
|
# Vous pouvez aussi initialiser un tableau avec la fonction split()
|
||||||
|
|
||||||
n = split("foo:bar:baz", arr, ":");
|
n = split("foo:bar:baz", arr, ":");
|
||||||
|
|
||||||
# Il y a aussi les tableaux associatifs
|
# Il y a aussi les tableaux associatifs
|
||||||
@ -131,7 +128,6 @@ BEGIN {
|
|||||||
|
|
||||||
# et les tableaux multi-dimensions, avec certaines limitations que l'on ne
|
# et les tableaux multi-dimensions, avec certaines limitations que l'on ne
|
||||||
# mentionnera pas ici
|
# mentionnera pas ici
|
||||||
|
|
||||||
multidim[0,0] = "foo";
|
multidim[0,0] = "foo";
|
||||||
multidim[0,1] = "bar";
|
multidim[0,1] = "bar";
|
||||||
multidim[1,0] = "baz";
|
multidim[1,0] = "baz";
|
||||||
@ -150,19 +146,16 @@ BEGIN {
|
|||||||
for (argnum in ARGV)
|
for (argnum in ARGV)
|
||||||
print ARGV[argnum];
|
print ARGV[argnum];
|
||||||
|
|
||||||
# Vous pouvez supprimer des éléments d'un tableau
|
# Vous pouvez supprimer des éléments d'un tableau.
|
||||||
# C'est utile pour empêcher AWK de supposer que certains arguments soient
|
# C'est utile pour empêcher AWK de supposer que certains arguments soient
|
||||||
# des fichiers à traiter.
|
# des fichiers à traiter.
|
||||||
|
|
||||||
delete ARGV[1];
|
delete ARGV[1];
|
||||||
|
|
||||||
# Le nombre d'arguments de la ligne de commande est assigné à
|
# Le nombre d'arguments de la ligne de commande est assigné à
|
||||||
# la variable ARGC
|
# la variable ARGC
|
||||||
print ARGC;
|
print ARGC;
|
||||||
|
|
||||||
# AWK inclue trois catégories de fonction.
|
# AWK inclue trois catégories de fonction. On les examinera plus tard.
|
||||||
# On les examinera plus tard
|
|
||||||
|
|
||||||
return_value = arithmetic_functions(a, b, c);
|
return_value = arithmetic_functions(a, b, c);
|
||||||
string_functions();
|
string_functions();
|
||||||
io_functions();
|
io_functions();
|
||||||
@ -182,8 +175,8 @@ function arithmetic_functions(a, b, c, d) {
|
|||||||
# déclaration de fonction, comme ci-dessus. La convention veut que vous
|
# déclaration de fonction, comme ci-dessus. La convention veut que vous
|
||||||
# mettiez quelques espaces supplémentaires pour faire la distinction entre
|
# mettiez quelques espaces supplémentaires pour faire la distinction entre
|
||||||
# les paramètres réels et les variables locales.
|
# les paramètres réels et les variables locales.
|
||||||
# Dans cet exemple, a, b et c sont des paramètres réels,
|
# Dans cet exemple, a, b et c sont des paramètres réels, alors que d est
|
||||||
# alors que d est simplement une variable locale.
|
# simplement une variable locale.
|
||||||
|
|
||||||
# Maintenant, les fonctions arithmétiques
|
# Maintenant, les fonctions arithmétiques
|
||||||
|
|
||||||
@ -219,17 +212,16 @@ function string_functions( localvar, arr) {
|
|||||||
# AWK a plusieurs fonctions pour le traitement des chaînes de caractères,
|
# AWK a plusieurs fonctions pour le traitement des chaînes de caractères,
|
||||||
# dont beaucoup reposent sur des expressions régulières.
|
# dont beaucoup reposent sur des expressions régulières.
|
||||||
|
|
||||||
# Chercher et remplacer, la première occurrence (sub) ou toutes les
|
# Chercher et remplacer, la première occurrence (sub), ou toutes les
|
||||||
# occurrences (gsub)
|
# occurrences (gsub).
|
||||||
# Les deux renvoient le nombre de correspondances remplacées
|
# Les deux renvoient le nombre de correspondances remplacées
|
||||||
|
|
||||||
localvar = "fooooobar";
|
localvar = "fooooobar";
|
||||||
sub("fo+", "Meet me at the ", localvar); # localvar => "Meet me at the bar"
|
sub("fo+", "Meet me at the ", localvar); # localvar => "Meet me at the bar"
|
||||||
gsub("e", ".", localvar); # localvar => "m..t m. at th. bar"
|
gsub("e", ".", localvar); # localvar => "m..t m. at th. bar"
|
||||||
|
|
||||||
# Rechercher une chaîne de caractères qui correspond à une expression
|
# Rechercher une chaîne de caractères qui correspond à une expression
|
||||||
# régulière index() fait la même chose, mais n'autorise pas les expressions
|
# régulière index() fait la même chose, mais n'autorise pas les expressions
|
||||||
# régulières
|
# régulières.
|
||||||
match(localvar, "t"); # => 4, puisque 't' est le quatrième caractère
|
match(localvar, "t"); # => 4, puisque 't' est le quatrième caractère
|
||||||
|
|
||||||
# Séparer par un délimiteur
|
# Séparer par un délimiteur
|
||||||
@ -255,16 +247,13 @@ function io_functions( localvar) {
|
|||||||
|
|
||||||
# AWK n'a pas de descripteur de fichier en soi. Il ouvrira automatiquement
|
# AWK n'a pas de descripteur de fichier en soi. Il ouvrira automatiquement
|
||||||
# un descripteur de fichier lorsque vous utilisez quelque chose qui en a
|
# un descripteur de fichier lorsque vous utilisez quelque chose qui en a
|
||||||
# besoin.
|
# besoin. La chaîne de caractères que vous avez utilisée pour cela peut être
|
||||||
# La chaîne de caractères que vous avez utilisée pour cela peut être traitée
|
# traitée comme un descripteur de fichier à des fins d'entrée / sortie.
|
||||||
# comme un descripteur de fichier à des fins d'entrée / sortie.
|
|
||||||
|
|
||||||
outfile = "/tmp/foobar.txt";
|
outfile = "/tmp/foobar.txt";
|
||||||
|
|
||||||
print "foobar" > outfile;
|
print "foobar" > outfile;
|
||||||
|
|
||||||
# Maintenant, la chaîne de caractères "outfile" est un descripteur de
|
# Maintenant, la chaîne de caractères "outfile" est un descripteur de
|
||||||
# fichier. Vous pouvez le fermer
|
# fichier. Vous pouvez le fermer.
|
||||||
close(outfile);
|
close(outfile);
|
||||||
|
|
||||||
# Voici comment exécuter quelque chose dans le shell
|
# Voici comment exécuter quelque chose dans le shell
|
||||||
@ -298,7 +287,7 @@ function io_functions( localvar) {
|
|||||||
|
|
||||||
# Cette action sera exécutée pour chaque ligne qui correspond à l'expression
|
# Cette action sera exécutée pour chaque ligne qui correspond à l'expression
|
||||||
# régulière, /^fo+bar$/, et sera ignorée pour toute ligne qui n'y correspond
|
# régulière, /^fo+bar$/, et sera ignorée pour toute ligne qui n'y correspond
|
||||||
# pas. Imprimons simplement la ligne:
|
# pas. Imprimons simplement la ligne :
|
||||||
|
|
||||||
print;
|
print;
|
||||||
|
|
||||||
@ -311,11 +300,11 @@ function io_functions( localvar) {
|
|||||||
# exécutée, comme le fait le shell. Et, comme le shell, chaque champ est
|
# exécutée, comme le fait le shell. Et, comme le shell, chaque champ est
|
||||||
# accessible avec un signe dollar.
|
# accessible avec un signe dollar.
|
||||||
|
|
||||||
# Ceci affichera les deuxième et quatrième champs de la ligne.
|
# Ceci affichera les deuxième et quatrième champs de la ligne.
|
||||||
print $2, $4;
|
print $2, $4;
|
||||||
|
|
||||||
# AWK défini automatiquement beaucoup d'autres variables qui peuvent vous
|
# AWK défini automatiquement beaucoup d'autres variables qui peuvent vous
|
||||||
# aider à inspecter et traiter chaque ligne. La plus importante est NF
|
# aider à inspecter et traiter chaque ligne. La plus importante est NF.
|
||||||
|
|
||||||
# Affiche le nombre de champs de la ligne
|
# Affiche le nombre de champs de la ligne
|
||||||
print NF;
|
print NF;
|
||||||
@ -325,7 +314,6 @@ function io_functions( localvar) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Chaque règle est en réalité un test conditionnel.
|
# Chaque règle est en réalité un test conditionnel.
|
||||||
|
|
||||||
a > 0 {
|
a > 0 {
|
||||||
# Ceci s’exécutera une fois pour chaque ligne, tant que le test est positif
|
# Ceci s’exécutera une fois pour chaque ligne, tant que le test est positif
|
||||||
}
|
}
|
||||||
@ -333,19 +321,16 @@ a > 0 {
|
|||||||
# Les expressions régulières sont également des tests conditionnels.
|
# Les expressions régulières sont également des tests conditionnels.
|
||||||
# Si le test de l'expression régulières n'est pas vrais alors le bloc
|
# Si le test de l'expression régulières n'est pas vrais alors le bloc
|
||||||
# n'est pas exécuté.
|
# n'est pas exécuté.
|
||||||
|
|
||||||
$0 /^fobar/ {
|
$0 /^fobar/ {
|
||||||
print "la ligne commence par foobar"
|
print "la ligne commence par foobar"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Dans le cas où vous voulez tester votre chaîne de caractères sur la ligne
|
# Dans le cas où vous voulez tester votre chaîne de caractères sur la ligne
|
||||||
# en cours de traitement $0 est optionnelle.
|
# en cours de traitement $0 est optionnelle.
|
||||||
|
|
||||||
/^[a-zA-Z0-9]$/ {
|
/^[a-zA-Z0-9]$/ {
|
||||||
print "La ligne courante ne contient que des caractères alphanumériques.";
|
print "La ligne courante ne contient que des caractères alphanumériques.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# AWK peut parcourir un fichier texte ligne par ligne et exécuter des actions en
|
# AWK peut parcourir un fichier texte ligne par ligne et exécuter des actions en
|
||||||
# fonction de règles établies. Cela est si courant sous UNIX qu'AWK est un
|
# fonction de règles établies. Cela est si courant sous UNIX qu'AWK est un
|
||||||
# langage de script.
|
# langage de script.
|
||||||
@ -354,7 +339,7 @@ $0 /^fobar/ {
|
|||||||
# parfait. Le script lit un nom à partir de l'entrée standard, puis affiche
|
# parfait. Le script lit un nom à partir de l'entrée standard, puis affiche
|
||||||
# l'âge moyen de toutes les personnes portant ce prénom.
|
# l'âge moyen de toutes les personnes portant ce prénom.
|
||||||
# Supposons que vous fournissiez comme argument le nom d'un fichier comportant
|
# Supposons que vous fournissiez comme argument le nom d'un fichier comportant
|
||||||
# ces données:
|
# ces données :
|
||||||
#
|
#
|
||||||
# Bob Jones 32
|
# Bob Jones 32
|
||||||
# Jane Doe 22
|
# Jane Doe 22
|
||||||
@ -397,9 +382,9 @@ $1 == name {
|
|||||||
# les fichiers texte. Contrairement à BEGIN, il ne fonctionne que si vous lui
|
# les fichiers texte. Contrairement à BEGIN, il ne fonctionne que si vous lui
|
||||||
# donnez une entrée à traiter. Il sera exécuté une fois que tous les fichiers
|
# donnez une entrée à traiter. Il sera exécuté une fois que tous les fichiers
|
||||||
# auront été lus et traités conformément aux règles et aux actions que vous
|
# auront été lus et traités conformément aux règles et aux actions que vous
|
||||||
# avez fournies. Le but est généralement de produire un rapport final
|
# avez fournies. Le but est généralement de produire un rapport final, ou de
|
||||||
# ou de faire quelque chose avec l'ensemble des données que vous avez
|
# faire quelque chose avec l'ensemble des données que vous avez accumulées
|
||||||
# accumulées au cours du script.
|
# au cours du script.
|
||||||
|
|
||||||
|
|
||||||
END {
|
END {
|
||||||
@ -408,6 +393,7 @@ END {
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Pour plus d'informations :
|
Pour plus d'informations :
|
||||||
|
|
||||||
* [Awk tutorial](http://www.grymoire.com/Unix/Awk.html)
|
* [Awk tutorial](http://www.grymoire.com/Unix/Awk.html)
|
||||||
|
Loading…
Reference in New Issue
Block a user