Aperghis-Tramoni
Le Langage AWK
C'est un langage de gestion ligne à ligne de fichiers.
Pour être traité par AWK, un fichier données doit, si possible, avoir une
structure cohérente :
Département d’Informatique
1
Université de la Méditerrannée
C. Aperghis-Tramoni
Fichiers d'exemple.
Les exemples qui seront développés porteront, en
fonction des structures que nous voulons mettre en
évidence, sur les fichier suivants:
Un texte, enregistré sous le nom de sonnet, c'est un
poeme de Ronsard, (Sur la mort de Marie, 1578) dont les
lignes sont, par définition, non structurées (nombre de
champs variable, lignes blanches, ponctuation).
Un fichier parfaitement structuré sur lequel il sera
possible de proceder à des calculs et a des présentations.
Il est stocké sous le nom Chauffeurs.
Département d’Informatique
2
Université de la Méditerrannée
C. Aperghis-Tramoni
Le fichier sonnet.
Terre, ouvre-moi ton sein, et me laisse reprendre
Mon tresor, que ta parque a cache dessous toi;
Ou bien, si tu ne peux, o terre, cache moi
Sous meme sepulture, avec sa belle cendre.
Département d’Informatique
3
Université de la Méditerrannée
C. Aperghis-Tramoni
Le fichier Chauffeurs.
Nom
Marque de
Consomm.
Kilomètres
Prix du
voiture
parcourus
litre
de
par jour
carb.
Département d’Informatique
4
Université de la Méditerrannée
C. Aperghis-Tramoni
Dans l’exemple qui est décrit le séparateur est l’espace, (FS = “ “).
Le compte des champs d’une ligne courante est calculé il est indiqué par le
positionnement d’une variable globale NF.
Dans notre exemple, le nombre de champs est constant et il est égal à 5, (NF = 5)
Le compte des lignes du fichier d’entrée se trouve dans une variable globale NR.
Notre fichier comporte 12 lignes, (NR = 12).
Département d’Informatique
6
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
7
Université de la Méditerrannée
C. Aperghis-Tramoni
Programmes AWK.
Avant tout, awk (ou nawk) est une commande unix dont elle présente toutes les caractéristiques.
On peut la tuber (ls -al | awk ...),
l’utiliser dans un script etc ...
Awk est aussi un langage de programmation.
Pour des applications simples :
awk 'Programme' Fichier-1 Fichier-2 ..... Fichier-n
Programme est dans ces conditions le nom d’un fichier contenant la suite d’instructions.
Département d’Informatique
8
Université de la Méditerrannée
C. Aperghis-Tramoni
Applications simples.
Département d’Informatique
9
Université de la Méditerrannée
C. Aperghis-Tramoni
Pour une application plus complexe, il est préférable que le programme soit
contenu dans un fichier d’instructions. L’exécution du fichier en question
se fera par la commande :
De la même manière, si aucun fichier n’est précisé, le fichier d’entrée sera stdin.
Département d’Informatique
10
Université de la Méditerrannée
C. Aperghis-Tramoni
Un fichier programme.
Ecrire un programme (verif) qui vérifie la cohérence
des données du fichier Chauffeurs.
/es2i/staff/chris : cat verif
NF !=5{print $0 "Nombre de champs different de 5"}
$3 > 15 {print $1 " semble consommer beaucoup."}
$4 > 500 {print $1 " roule beaucoup."}
$4 < 200 {print $1 " roule peu."}
$5 > 5.50 {print $1 " paye son essence un peu cher."}
/es2i/staff/chris : nawk -f verif Chauffeurs
Pierre roule peu.
Robert roule beaucoup.
Alain roule peu.
Marc semble consommer beaucoup.
Francois semble consommer beaucoup.
Serge roule beaucoup.
Serge paye son essence un peu cher.
Luc roule beaucoup.
/es2i/staff/chris :
Département d’Informatique
11
Université de la Méditerrannée
C. Aperghis-Tramoni
Le programme AWK.
Un programme awk se présente toujours comme nous venons de le définir :
CONDITION {ACTION}
CONDITION {ACTION}
..........
Une condition porte exclusivement sur une ligne du fichier d’entrée si 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.
Quels sont les noms possesseurs de Toyotas ? awk '$2 == "Toyota" {print $1}' Chauffeurs
Condition Action Fichier
Département d’Informatique
12
Université de la Méditerrannée
C. Aperghis-Tramoni
Condition et Action.
La présence des champs condition ou action est facultative.
Si la condition est absente, l’action est exécutée systématiquement.
awk '{print}' Chauffeurs
Si l’action est absente on imprimera la ligne, en fait, l’action standard est {print}
Imprimer les informations relatives aux possesseurs de Peugeots :
awk '$2 == "Peugeot" ' Chauffeurs
ou bien :
awk '{if ($2 == "Peugeot") print}' Chauffeurs
Département d’Informatique
13
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
14
Université de la Méditerrannée
C. Aperghis-Tramoni
les formats.
Il est possiblede formater les données de sortie afin d’obtenir une
présentation agréable :
Format
printf (format, valeur-1, valeur-2, ....., valeur-n)
Le format est une chaine contenant entre autre des %
A chaque valeur est associé un %, Il y a autant de % que de valeurs
nawk '{printf ("%s consomme %d litres aux 100, cout hebdomadaire %.2f francs.\n",
$1, $3, $4*7*$5/100)}' Chauffeurs
\n : Passage à la ligne.
\t : Tabulation.
Département d’Informatique
15
Université de la Méditerrannée
C. Aperghis-Tramoni
Exemple de format.
Calcul de dépense hebdomadaire.
/es2i/staff/chris : nawk '{printf ("%s consomme %d litres aux 100,
cout hebdomadaire %.2f francs.\n", $1, $3, $4*7*$5/100)}' Chauffeurs
Jean consomme 10 litres aux 100, cout hebdomadaire 96.25 francs.
Claude consomme 8 litres aux 100, cout hebdomadaire 85.75 francs.
Pierre consomme 14 litres aux 100, cout hebdomadaire 52.50 francs.
Robert consomme 11 litres aux 100, cout hebdomadaire 200.20 francs.
Alain consomme 9 litres aux 100, cout hebdomadaire 35.00 francs.
Marc consomme 17 litres aux 100, cout hebdomadaire 96.25 francs.
Michel consomme 10 litres aux 100, cout hebdomadaire 127.40 francs.
Norbert consomme 15 litres aux 100, cout hebdomadaire 140.00 francs.
Francois consomme 20 litres aux 100, cout hebdomadaire 85.75 francs.
Serge consomme 11 litres aux 100, cout hebdomadaire 330.40 francs.
Luc consomme 12 litres aux 100, cout hebdomadaire 273.00 francs.
Albert consomme 7 litres aux 100, cout hebdomadaire 61.25 francs.
Charles consomme 12 litres aux 100, cout hebdomadaire 115.50 francs.
/es2i/staff/chris :
Département d’Informatique
16
Université de la Méditerrannée
C. Aperghis-Tramoni
print
Ecriture de *0 sur stdout.
Département d’Informatique
17
Université de la Méditerrannée
C. Aperghis-Tramoni
Les formats.
Département d’Informatique
18
Université de la Méditerrannée
C. Aperghis-Tramoni
Exemples de formats.
Format
Contenu de var
printf ("Format";var)
"'%c'\n"
83
's'
"'%d'\n"
83.5
'83'
"'%5d'\n"
83.5
' 83'
"'%e'\n"
83.5
'8.350000e+01'
"'%f'\n"
83.5
'83.500000'
"'%7.2f'\n"
83.5
' 83.50'
"'%g'\n"
83.5
'83.5'
"'%6g'\n"
83.5
' 83.5'
"'%o'\n"
83
'123'
"'%06o'\n"
83.5
'000123'
"'%x'\n"
83
'53'
"'%s'\n"
"ecole"
'ecole'
"'%10s'\n"
"ecole"
' ecole'
"'%-10s'\n"
"ecole"
'ecole '
"'%.3s'\n"
"ecole"
'eco'
"'%10.3s'\n"
"ecole"
' eco'
"'%-10.3s'\n"
"ecole"
'eco '
Département d’Informatique
19
Université de la Méditerrannée
C. Aperghis-Tramoni
Les déclarations.
L’un des principaux attraits de awk, et ce qui en fait sa puissance, est qu’il n’y a
ni déclaration de variable ni déclaration de type.
Département d’Informatique
20
Université de la Méditerrannée
C. Aperghis-Tramoni
Expressions, Collisions.
Le système appelle “Pattern” que nous traduirons par modèle, les expressions
utilisées pour sélectionner les diverses lignes d’un fichier.
Lorsqu’une forme est reconnue (“Matchée”), l’action écrite est alors exécutée.
-> Comparaison.
-> Calcul.
-> Texte.
-> Combinaison de diverses sélections par des opérateurs logiques.
Département d’Informatique
21
Université de la Méditerrannée
C. Aperghis-Tramoni
Exemples de sélections.
Forme de sélection.
Exemples.
Sélection réalisée.
Exécution du programme inclus
BEGIN
BEGIN
avant toute lecture du
fichier.
Exécution du programme inclus
END
END
aprés lecture de la fin de
fichier.
Exécution du programme inclus
Expression logique.
NF > 5
si le nombre de champs de la
ligne est supérieur à 5.
Comparaison de
Exécution du programme inclus
chaines de
/Renault/
si la ligne contient la
caractères.
chaine /Renault/.
Exécution du programme inclus
Compositions de
NF > 5 && /To/
si la ligne contient plus de
sélections.
5 champs et la chaine /To/.
Exécution du programme inclus
Intervalle.
NR == 10,NR == 20
sur les lignes 5 à 20 du
fichier.
Département d’Informatique
22
Université de la Méditerrannée
C. Aperghis-Tramoni
Ils peuvent être utilisés à la fois sur les nombres et sur les chaines.
Soit par exemple à imprimer la liste de ceux qui parcourent plus de 500 KM
par jour en les faisant suivre de la mention “roule beaucoup”.
/es2i/staff/chris : nawk '$4 >= 500 {print $1," roule beaucoup"} ' Chauffeurs
Robert roule beaucoup
Serge roule beaucoup
Luc roule beaucoup
/es2i/staff/chris :
Département d’Informatique
23
Université de la Méditerrannée
C. Aperghis-Tramoni
/es2i/staff/chris : nawk '$3*$4*$5/100 >= 250 {print $1," coute ", $3*$4*$5/100,
"francs par semaine."} ' Chauffeurs
Robert coute 314.6 francs par semaine.
Norbert coute 300 francs par semaine.
Serge coute 519.2 francs par semaine.
Luc coute 468 francs par semaine.
/es2i/staff/chris :
Département d’Informatique
24
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
25
Université de la Méditerrannée
C. Aperghis-Tramoni
Combinaisons de conditions.
Les opérateurs logiques sont les mêmes qu’en C :
&& -> Et
|| -> Ou
! -> Non
Département d’Informatique
26
Université de la Méditerrannée
C. Aperghis-Tramoni
BEGIN et END.
Lorsque BEGIN est utilise, les actions qui lui succèdent sont effectuées avant que
la première ligne du fichier ne soit lue.
Lorsque END est utilise, les actions qui lui succèdent sont effectuées aprés que la
dernière ligne du fichier soit lue.
Département d’Informatique
27
Université de la Méditerrannée
C. Aperghis-Tramoni
Un exemple de présentation.
/es2i/staff/chris :
Département d’Informatique
28
Université de la Méditerrannée
C. Aperghis-Tramoni
Opérateur
Signification.
<
Inférieur à.
<=
Inférieur ou égal à.
==
égal à.
!=
Différent de.
>=
Supérieur ou égal à.
>
Supérieur à.
~
Reconnu par.
!~
non reconnu par.
Département d’Informatique
29
Université de la Méditerrannée
C. Aperghis-Tramoni
Les actions.
Les actions peuvent être de simples impressions {print}, des affectations ou des
ensembles de lignes comportant des éléments du vocabulaire non terminal du
langage, des définitions de fonctions etc ...
Département d’Informatique
30
Université de la Méditerrannée
C. Aperghis-Tramoni
Les expressions.
Les expressions les plus simples sont des blocs primaires constitués
de constantes, de variables, de séparateurs.
-> Arithmétiques
-> Comparaisons
-> Logiques
-> Conditionnelles
-> Affectations
Département d’Informatique
31
Université de la Méditerrannée
C. Aperghis-Tramoni
Les constantes.
Chaines de caractères :
“Francois”
“Christian Aperghis”
“ “
“”
La précision maximale
Constantes numériques entières :
dépend de la machine.
5000
1000,5
0.55E-3
1e6
Département d’Informatique
32
Université de la Méditerrannée
C. Aperghis-Tramoni
Les Variables.
Les variables peuvent être prédéfinies ou appartenir à l’usager.
Département d’Informatique
33
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
34
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
35
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
36
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
37
Université de la Méditerrannée
C. Aperghis-Tramoni
La boucle while.
Sachant que le prix du carburant augmente de 3% tous les six mois, calculez le prix de revient du
kilomètre de chaque voiture pour les deux ans qui viennent.
/es2i/staff/chris : cat prospect
BEGIN {printf ("\nMarque\tMaintenant\t6 mois \t12 mois\t18 mois\t24 mois\n")}
$2 == "Peugeot" { np = np+1; cp = $3*$5/100 + cp}
$2 == "Citroen" { nc = nc+1; cc = $3*$5/100 + cc}
$2 == "Renault" { nr = nr+1; cr = $3*$5/100 + cr}
$2 == "Toyota" { nt = nt+1; ct = $3*$5/100 + ct}
END { i = 1; printf ("\nPeugeot")
i = 1; printf ("\nCitroen")
printf ("\t%7.2f\t",cp)
printf ("\t%7.2f\t",cc)
while (i<=4) { cp = cp * 1.03
while (i<=4) { cc = cc * 1.03
i = 1; printf ("\nRenault")
printf ("\t%6.2f",cc)
printf ("\t%7.2f\t",cr)
i = i + 1}
while (i<=4) { cr = cr * 1.03
i = 1; printf ("\nRenault")
printf ("\t%6.2f",cr)
printf ("\t%7.2f\t",cr)
i = i + 1}
while (i<=4) { cr = cr * 1.03
i = 1; printf ("\nToyota")
printf ("\t%6.2f",cr)
printf ("\t%7.2f\t",ct)
i = i + 1}
while (i<=4) { ct = ct * 1.03
i = 1; printf ("\nToyota")
printf ("\t%6.2f",ct)
printf ("\t%7.2f\t",ct)
i = i + 1}
while (i<=4) { ct = ct * 1.03
printf ("\n\n")
printf ("\t%6.2f",ct)
}
i = i + 1}
printf ("\t%6.2f",cp)
printf ("\n\n")
i = i + 1}
}
Département d’Informatique
38
Université de la Méditerrannée
C. Aperghis-Tramoni
Exécution du programme.
/es2i/staff/chris : nawk -f prospect Chauffeurs
/es2i/staff/chris :
Département d’Informatique
39
Université de la Méditerrannée
C. Aperghis-Tramoni
La boucle for.
Imprimer les données du fichier Chauffeurs en séparant les champs
par une tabulation.
/es2i/staff/chris : cat edite
{for (i = 1;i <= NF; i++) printf ("%10s\t",$i)
printf ("\n")
}
/es2i/staff/chris : nawk -f edite Chauffeurs
Jean Peugeot 10 250 5.50
Claude
Citroen 8 350 3.50
Pierre
Toyota 14 150 5.00
Robert Peugeot 11 550 5.20
Alain Renault 9 100 5.00
Marc Renault 17 250 5.50
Michel Citroen 10 350 5.20
Norbert Toyota 15 400 5.00
Francois Peugeot 20 350 3.50
Serge Peugeot 11 800 5.90
Luc Toyota 12 750 5.20
Albert
Peugeot 7 250 3.50
Charles Renault 12 300 5.50
/es2i/staff/chris :
Département d’Informatique
40
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
41
Université de la Méditerrannée
C. Aperghis-Tramoni
La fonction split().
split(s,a) permet l’éclatement de la chaine s en fonction du caractère séparateur (FS).
Chaque élément ainsi défini est positionné dans le tableau a.
Département d’Informatique
42
Université de la Méditerrannée
C. Aperghis-Tramoni
La fonction gsub().
gsub(motif,remplacement,chaine)
permet de remplacer dans la chaine la forme définie par le motif.
/es2i/staff/chris : cat gsub
BEGIN {print "De la deliquescence du couple Automobile-Automobiliste.}
/es2i/staff/chris : cat gsub
BEGIN {print "Deliquescence du couple Automobile-Automobiliste."}
$1 == "Francois" {chaine =$1 $2}
END {while (chaine != "")
{
print chaine
x=gsub(/[a-zA-Z]$/,"",chaine)
/es2i/staff/chris : nawk -f gsub Chauffeurs
}
Deliquescence du couple Automobile-Automobiliste.
exit
FrancoisPeugeot
}
FrancoisPeugeo
/es2i/staff/chris :
FrancoisPeuge
FrancoisPeug
FrancoisPeu
FrancoisPe
FrancoisP
Francois
Francoi
Franco
Franc
Fran
Fra
Fr
F
/es2i/staff/chris :
Département d’Informatique
43
Université de la Méditerrannée
C. Aperghis-Tramoni
Les tableaux.
Les tableaux serviront au stockage de toutes les données (chaines ou valeurs).
Ils ne sont pas déclarés.
Créer le tableau contenant les noms de tous les chauffeurs et les trier.
/es2i/staff/chris : cat tri
{Chauffeurs[NR] = $1}
END {for (i=NR;i>=1;i--)
for (j=2;j<=i-1;j++)
if (Chauffeurs[j] > Chauffeurs[j+1])
{
Temp=Chauffeurs[j]
Chauffeurs[j]=Chauffeurs[j+1]
Chauffeurs[j+1]=Temp
}
/es2i/staff/chris : nawk -f tri Chauffeurs
for (i=1;i<=NR;i++) print Chauffeurs[i]
Jean
}
Alain
/es2i/staff/chris :
Albert
Charles
Claude
Francois
Luc
Marc
Michel
Norbert
Pierre
Robert
Serge
/es2i/staff/chris :
Département d’Informatique
44
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
45
Université de la Méditerrannée
C. Aperghis-Tramoni
Les fonctions.
Comme dans la majorité des langages, il est possible à l’usager
de définir ses propres fonctions.
Département d’Informatique
46
Université de la Méditerrannée
C. Aperghis-Tramoni
Exemple de fonction.
Déterminer le carburant
/es2i/staff/chris : cat fonction
utilisé en fonction du prix.
{printf ("%s roule au %s\n",$1,carburant($5))}
function carburant(prix)
{
if (prix < 4.00) { return "Diesel"}
if (prix <= 5.30) { return "Super sans plomb"}
if (prix > 5.30) { return "Super"}
}
/es2i/staff/chris :
/es2i/staff/chris : nawk -f fonction Chauffeurs
Jean roule au Super
Claude roule au Diesel
Pierre roule au Super sans plomb
Robert roule au Super sans plomb
Alain roule au Super sans plomb
Marc roule au Super
Michel roule au Super sans plomb
Norbert roule au Super sans plomb
Francois roule au Diesel
Serge roule au Super
Luc roule au Super sans plomb
Albert roule au Diesel
Charles roule au Super
/es2i/staff/chris :
Département d’Informatique
47
Université de la Méditerrannée
C. Aperghis-Tramoni
Les entrées…
Nous avons déjà vu une possibilité de fournir des données à la commande awk,
c’est d’utiliser un fichier qui contient les données et de soummettre ce fichier au
traitement d’un programme qui peut être soit explicité dans la commande ou stocké
lui aussi dans un fichier programme.
awk ‘programme’ fichier-de-données
awk -f fichier-de-programme fichier-de-données
Département d’Informatique
48
Université de la Méditerrannée
C. Aperghis-Tramoni
La fonction getline.
Ainsi, tous les programmes vus jusqu’ici peuvent être réécrits placés
dans BEGIN en utilisant la fonction getline.
L’exécution est alors réalisée par la commande :
awk -f fichier-de-programme
Département d’Informatique
49
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
50
Université de la Méditerrannée
C. Aperghis-Tramoni
Interactions.
Comme pour toute commande unix, la sortie dirigée de manière
standard dur stdout par print ou printf, peut être redirigée au
moyen de la redirection (>) vers tout fichier ou pipée (|) vers
une autre commande.
awk ‘{print $1}’ Chauffeurs > noms
awk ‘{print $2}’ Chauffeurs >> noms
awk ‘{print $1}’ Chauffeurs| cat
cat Chauffeurs | awk ‘{print $1}’
Département d’Informatique
51
Université de la Méditerrannée
C. Aperghis-Tramoni
La fonction system.
La commande ‘system (expresion)’ exécute la commande “expression”
donnée sous forme de chaine de caractères.
/es2i/staff/chris : cat system
BEGIN {
system("ps")
}
/es2i/staff/chris : nawk -f system
PID TTY TIME COMMAND
2841 ttyq0 0:00 ps
2840 ttyq0 0:00 sh
2648 ttyq0 0:00 csh
2839 ttyq0 0:00 nawk
/es2i/staff/chris :
Département d’Informatique
52
Université de la Méditerrannée
C. Aperghis-Tramoni
Type
Signification.
Sélectionne la ligne courante lorsqu’une sous
/expression régulière/
chaine est valide en fonction de l’expression
régulière.
Département d’Informatique
53
Université de la Méditerrannée
C. Aperghis-Tramoni
Exemples
Département d’Informatique
54
Université de la Méditerrannée
C. Aperghis-Tramoni
L'opérateur ~ (tilda).
Département d’Informatique
55
Université de la Méditerrannée
C. Aperghis-Tramoni
Application.
Trouver toutes les lignes dans
/es2i/staff/chris : nawk '$1 ~/e/' sonnet
lesquelles le premier champ
Terre, ouvre-moi ton sein, et me laisse reprendre
Le trait qui la tua devait faire descendre
contient au moins un “e”.
Je ne saurais plus vivre, et me fache d'attendre.
Le bonheur de les voir, a l'heure je vivais,
Maintenant je suis mort : la Mort qui s'en alla
Loger dedans ses yeux, en parlant m'appela,
/es2i/staff/chris :
Trouver toutes les lignes dans
/es2i/staff/chris : nawk '$1 !~/e/' sonnet
lesquelles le premier champ
Mon tresor, que ta parque a cache dessous toi;
ne contient pas de “e”.
Ou bien, si tu ne peux, o terre, cache moi
Sous meme sepulture, avec sa belle cendre.
Remarques :
Mon corps aupres du sien pour finir mon emoi;
Le premier champ d’une ligne
Aussi bien, vu le mal qu'en sa mort je recoit,
vide ne contient pas de ‘e’.
Le premier champ de la ligne
Quand ses yeux m'eclairaient, et qu'en terre j'avais
ne contient pas un ‘e’, il contient
Ayant de leurs rayons mon ame gouvernee.
un ‘E’.
Et me fit de ses pieds accomplir ma journee.
/es2i/staff/chris :
Département d’Informatique
56
Université de la Méditerrannée
C. Aperghis-Tramoni
\$ pour le caractère $
\\ pour le caractère \
De plus
Département d’Informatique
57
Université de la Méditerrannée
C. Aperghis-Tramoni
Exemples.
^F
: Recherche d’un “F” au début de la chaine.
e$
: Recherche d’un “e” en fin de chaine.
^le$
: Recherche de la chaine composée des deux caractères “le”.
^.$
: Recherche de la chaine composée d’un seul caractère.
...
: Recherche de toute chaine composée de trois caractères.
\.$
: Recherche d’un point “.” en fin de chaine.
Département d’Informatique
58
Université de la Méditerrannée
C. Aperghis-Tramoni
Exemples.
Quelles sont les lignes qui se terminent par un ‘e’.
/es2i/staff/chris : nawk '/e$/' sonnet
Terre, ouvre-moi ton sein, et me laisse reprendre
Le trait qui la tua devait faire descendre
/es2i/staff/chris :
Imprimer les lignes blanches !!!
/es2i/staff/chris : nawk '/^$/' sonnet
/es2i/staff/chris :
Quelles sont les lignes qui se terminent par un ‘;’.
/es2i/staff/chris : nawk '/\;$/' sonnet
Mon tresor, que ta parque a cache dessous toi;
Mon corps aupres du sien pour finir mon emoi;
/es2i/staff/chris :
Département d’Informatique
59
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
60
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
61
Université de la Méditerrannée
C. Aperghis-Tramoni
^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)([eE][+-]?[0-9]+)?$
Département d’Informatique
62
Université de la Méditerrannée
C. Aperghis-Tramoni
Récapitulatif.
EXPRESSION
MODELE RECONNU
c
Tout non métacaractère c.
\m
Une séquence de tabulation ou tout métacaractère m pris au sens litéral.
^
Test effectué au début de la chaine.
$
Test effectué à la fin de la chaine.
.
Tout caractère sauf une fin de ligne.
[c1c2...]
Tout caractère expressément listé entre les crochets.
[^c1c2...]
Tout caractère exepté ceux qui sont expressément listés entre les crochets.
[c1-c2]
Tout caractère appartenant à l’intervalle c1 c2, bornes comprises.
r1|r2
Toute chaine de caractères validée soit par r1 soit par r2.
Toute chaine de caractères de type AB, dans laquelle l’expression régulière
(r1)(r2)
r1 valide A et l’expression régulière r2 valide B.
(r)*
Zéro à n chaines consécutives validées par l’expression régulière r.
(r)+
Une à n chaines consécutives validées par l’expression régulière r.
(r)?
Toute chaine validée par l’expression r, chaine vide incluse.
(r)
Toute chaine validée par l’expression r, chaine vide exclue.
Département d’Informatique
63
Université de la Méditerrannée
C. Aperghis-Tramoni
Département d’Informatique
64
Université de la Méditerrannée