Académique Documents
Professionnel Documents
Culture Documents
UNIX
La programmation
AWK
AbdelAli.Ed-Dbali@lifo.univ-orleans.fr
A. ED-DBALI
Programme awk
Ligne1
slection1 {action1}
slectionn {actionn}
Ligne2
Lignem
A. EDED-DBALI
Lignei
toute la ligne
$1
NR=i
Lignen
$0
$2
$NF
A. EDED-DBALI
Quelques exemples
A. EDED-DBALI
A. EDED-DBALI
A. EDED-DBALI
Expression rgulire
/expression/
Slection vrifie si la ligne vrifie lexpression rgulire
Exemples :
/exemple/ : ligne contenant le mot exemple
/[a-z][a-z]*$/ : ligne se terminant par une suite de
lettres minuscules
A. EDED-DBALI
Relation
Oprateurs de relation : <, <=, ==, !=, >=, >
Exemples :
$1 == "chane"
vraie si le premier champ est "chane"
NF != 5
vraie si le nombre de champs de la ligne courante est 5
$NF > 20
vraie si le dernier champ est > 20 (ne pas confondre
avec : NF > 20 nombre de champs > 20)
A. EDED-DBALI
Combinaison de slections
|| (ou) : NR == 10 || NF == 5
La ligne 10 ou le nombre de champs = 5
A. EDED-DBALI
Expressions rgulires
Interprtation
caractre quelconque
dbut de dfinition d'un ensemble
dbut de dfinition du complment d'un ensemble
fin de dfinition d'un ensemble ou de son complment
marque d'intervalle dans un ensemble
en dbut d'expression, dfinit le dbut de la ligne
en fin d'expression, dfinit la fin de la ligne
dbut de dfinition d'une sous-expression (accessible en
suite par \1, \2, )
fin de dfinition d'une sous-expression
10
A. EDED-DBALI
Expressions rgulires
Exemples
/[a2m]/
/[a-z]/
/[02-57]/
/[a-d5-8X-Z]/
/[0-5-]/
/[^0-9]/
/[^a-zA-Z]/
/[012^]/
/^abc/
/[a-z0-9]$/
/^$/
a, 2 ou m
une lettre minuscule
0, 2, 3, 4, 5 ou 7
a, b, c, d, 5, 6, 7, 8, X, Y ou Z
0, 1, 2, 3, 4, 5 ou pas un chiffre
pas une lettre
0, 1, 2 ou ^
ligne commenant par abc
ligne finissant par une lettre minuscule ou
un chiffre
ligne vide
11
A. EDED-DBALI
Caractre
*
+
?
|
(ER)
Interprtation
0 ou plusieurs fois ce qui le prcde (caractre ou ER)
1 ou plusieurs fois ce qui le prcde
0 ou 1 fois ce qui le prcde
disjonction d'expressions rgulires (ER1|ER)
groupement de caractres (pour viter les ambiguts)
Exemples :
/[a-z]*/ : 0 ou plusieurs lettres minuscules
/aa*/ : au moins un a
/.*/ : n'importe quelle chane de caractres (mme vide)
/^[0-9][0-9]*$/ : ligne qui ne contient que des chiffres
/(fermer|ouvrir) (fenetre|porte)/ : fermer ou ouvrir suivi de
fenetre ou porte
(TA)+C : reconnat TAC, TATAC, TATATAC, etc.
^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)([eE][+-]?[0-9]+)?$ :
reconnat un nombre rel seul dans une ligne
12
A. EDED-DBALI
Constantes :
Les chanes :
Chane = constante entoures de "
Caractres spciaux : \t (tabulation), \n (new line), \a (signal
sonore), \b (retour arrire), \r (carriage return), \ccc (caractre
reprsent par son code octal (c chiffre octal)),
Variables :
Variables utilisateur
Suite de lettres, de chiffres et du caractre '_' qui ne
commence pas par un chiffre
Pas de dclaration pralable
awk dtermine le type des variables par le contexte d'utilisation
Variables prdfinies
UNIX : La programmation AWK
13
A. EDED-DBALI
Variables prdfinies
Variable
Dfinition
Dfaut
ARGC
ARGV
FILENAME
NF
NR
FNR
FS
RS
OFS
ORS
OFMT
RLENGTH
RSTART
ENVIRON
""
"\n"
""
"\n"
"%.6g"
-
14
A. EDED-DBALI
Oprateurs
Exemple
= += -= *= x *= 2 + $1
/= %= ^=
Signification
x = x*(2+$1)
Conditionnelle
? :
c ? e1 : e2
si c alors e1 sinon e2
Conjonction
&&
c1 && c2
=1 si c1 et c2 vrai, 0 sinon
Disjonction
||
c1 || c2
=1 si c1 ou c2, 0 sinon
Appartenance
un tableau
in
i in T
$1 ~ /ER/
Correspondance ~ !~
(matching)
< <= == != x == y
Comparaison
>= >
Concatnation
UNIX : La programmation AWK
=1 si champ 1 correspond
ER, 0 sinon
=1 si galit, 0 sinon
"mon awk" : pas d'oprateur
explicite
A. EDED-DBALI
Oprateurs Exemple
somme,
soustraction
+-
Signification
x + y - $2
a%b
plus et moins
unaire
+-
-x
Oppos de x
Ngation
|$1
Ngation de $1
Puissance
x^n
xn
Incrment,
dcrment
++ --
++x, x++
Incrmente x de 1
Accs au champ $
$NF-1
Groupement
($i)++
Incrmente $i de 1
()
16
A. EDED-DBALI
17
A. EDED-DBALI
printf(format, liste_expr)
comme en langage C
18
A. EDED-DBALI
sprintf(format, liste_expr)
Mme fonctionnement que printf
Aprs garnissage, format est renvoye comme
rsultat (pas d'affichage)
Permet d'affecter des chanes avec un contenu
format
Exemple :
X = sprintf("%3.2f %d %X %x", 45.457, 111, 111, 111)
Met dans X la chane : " 45.46 111 FF ff"
19
A. EDED-DBALI
length[(chane)]
Renvoie la longueur de chane (si chane absente,
$0 pris par dfaut)
Exemple :
$ echo "123456 89" |
> awk '{ print length, length($1) }'
9 6
longueur de la ligne : 9
longueur du 1er champ 123456 : 6
Attention :
length(15 * 35) vaut 3 :
calcul de 15 * 35 = 525
conversion en chane "525"
length("525") = 3
UNIX : La programmation AWK
20
A. EDED-DBALI
index(chane, sous-chane)
Renvoie la position de sous-chane dans chane
Si sous-chane chane, renvoie 0
Exemple :
$ echo "programmation awk" |
> awk '{print index($1, "gram")}'
4
match(chane, ER)
Cherche dans chane, la plus longue chane correspondant
l'expression rgulire ER puis renvoie sa position
Deux variables sont positionnes galement :
RSTART : position de ER trouve dans chane (0 sinon)
RLENGTH : longueur de la sous-chane trouve (-1 sinon)
21
A. EDED-DBALI
22
A. EDED-DBALI
23
A. EDED-DBALI
24
A. EDED-DBALI
tolower(chane)
Renvoie la conversion de chane en minuscule
Exemples :
print tolower($1)
Affiche $1 aprs conversion en minuscule
tolower($2) == "debut"
Teste si $2 vaut "debut" ou "Debut" ou "DEBUT" ou
toupper(chane)
Renvoie la conversion de chane en majuscule
25
A. EDED-DBALI
Valeur
cos(x)
sin(x)
atan2(y,x)
sqrt(x)
log(x)
exp(x)
int(x)
rand()
srand(x)
cosinus de x (x en radians)
sinus de x (x en radians)
arc-tangente de y/x renvoye dans l'intervalle - et
racine carre de x
logarithme nprien de x
exponentielle de x
partie entire de x
nombre r alatoire, 0 r < 1
x est le point de dpart dans la gnration alatoire
rand(). srand() fait dbuter le gnrateur selon
l'heure
26
A. EDED-DBALI
27
A. EDED-DBALI
28
A. EDED-DBALI
29
A. EDED-DBALI
30
NbrChamp1
N " fois"
A. EDED-DBALI
Tableaux
Tableau[Indice] = Valeur
Indice peut tre n'importe quoi (chane ou nombre)
Tableau peut ne pas exister auparavant
Exemples : T[1]="Un"; T[12.5]="Nombre"; T["moi"]=100
31
A. EDED-DBALI
Tableaux
delete tableau[indice]
Ecrase l'lment indic par indice dans tableau
delete T[i] rend inaccessible l'lment d'indice i :
T[i] vaut ""
Le test 'i in T' renvoi faux
Exemples :
for (i in T) delete T[i]
crase tous les lments du tableau T
delete T : fait de mme mais n'est pas standard POSIX
split("", T) : vide le tableau T de ses lments
Remarque :
T[01] et T[1] ne dsignent pas la mme chose
Tout tant ramen aux chanes, "01" "1" (les lments
qu'ils indicent aussi)
32
A. EDED-DBALI
Fonctions
Objectifs
Structurent les scripts
Permettent la cration de bibliothques
Dfinition :
function nom_fonction ([arg, ]) {instructions}
return [expression] : arrt de la fonction avec
expression comme valeur de retour
33
A. EDED-DBALI
Fonctions
Exemples :
function affiche(Nbr)
{ printf("%10.2f\n", Nbr) }
$1 ~ /donnee/ { affiche($3) }
34
A. EDED-DBALI
print | commande
Redirige le rsultat vers l'entre standard de commande
35
A. EDED-DBALI
getline var
lecture dans var ($0, NF inchanges)
ou
ou
36
A. EDED-DBALI
37
A. EDED-DBALI
A. EDED-DBALI
Substitution : s
s/chercher/remplacer/option
Remplace les expressions rgulires chercher par la chane
remplacer
option :
g : remplacement global (par dfaut seule la premire
occurrence est remplace)
p : imprime la ligne (utile avec l'option -n)
w fichier : crit la ligne dans fichier (en plus de la sortie
standard)
Exemples :
sed "s/[Cc]omputer/COMPUTER/g" fichier
sed -e "s/\([0-9][0-9]*\)/==\1==/" fichier : encadre le premier
nombre de la ligne avec des ==
UNIX : La programmation AWK
39
A. EDED-DBALI
Ngation : !
!commande
commande est applique toutes les lignes qui ne
correspondent pas la caractrisation
Suppression : d
Retire de la sortie les lignes qui correspondent la
caractrisation. Le fichier d'origine n'est pas affect
Exemples :
$ sed "1,5d" fich : imprime fich partir de la 6me ligne
(quivalent : tail +6 fich)
$ sed "/^$/d" fich : imprime fich sans ses lignes vides
$ sed "/^Total/!d" fich : retire toutes les lignes qui ne
commencent pas par "Total" imprime toutes les lignes qui
commencent par "Total"
40
A. EDED-DBALI
Insertion : i, a
i\
texte
Exemples :
5i\
La ligne est insre avant la ligne 5 actuelle
/^[0-9]+/i\
Un nombre au dbut de la ligne qui suit
a\
texte
insrer texte aprs la ligne
correspondant la caractrisation
Divers : q, =, w
q
=
w fichier
quitter
crire les numros de lignes
crire dans fichier
41
A. EDED-DBALI
42
A. EDED-DBALI
Code de retour
Renvoyer toujours explicitement un code de retour document.
Sa valeur est : 0 si tout s'est bien pass, 0 sinon
Trs utile si le script est appel dans un autre
O installer le script
Dans un rpertoire ddi (ex : $HOME/bin)
Mettre ce rpertoire dans PATH (au niveau du .profile) : export
PATH=$PATH:$HOME/bin
Remarque : viter de mettre le rpertoire courant '.' en dbut de PATH
(problme de scurit)
43
A. EDED-DBALI
L'diteur vi
$ vi fichier
insertion :
i niveau curseur, a aprs,
I dbut ligne, A fin ligne,
o ligne aprs, O ligne avant
Effacement :
x : caractre dw : fin mot
dd : ligne d0 : dbut ligne
d$ : fin ligne
p : rtablir aprs
curseur
Dplacement :
caractres : h (gauche), l (droite),
j (bas), k (haut)
mots : b (gauche), w (droite)
lignes : 0 (dbut), $ (fin)
pages : ^d (bas),
^u (haut)
Commandes :
:f : infos sur fichier en cours
^g : idem
:w fich : sauvegarde dans
fich
:q : quitter
:wq : sauver et quitter
ZZ : idem
:q! : quitter mme non sauv
:e fich : charger fich
:r fich : inclure fich aprs
ligne courante
:! cmd_shell : excuter
cmd_shell
:r! cmd_shell : excuter et
insrer rsultat de cmd_shell
/motif : recherche de motif
^l : rafrachit l'cran
Exemple : $ vi -c ":r fich2" fich1 ( charge le fichier fich1 en incluant sa fin le contenu de fich2 )
UNIX : La programmation AWK
44
A. EDED-DBALI