Vous êtes sur la page 1sur 44

Universit dOrlans

UNIX
La programmation
AWK
AbdelAli.Ed-Dbali@lifo.univ-orleans.fr

A. ED-DBALI

awk - principe de fonctionnement




Forme gnrale dun programme awk :


Fichier en entre

Programme awk

 BEGIN {action dbut}

Ligne1

slection1 {action1}

slectionn {actionn}

Ligne2

 END {action fin}

Lignem

 Excute avant le dbut de lecture du fichier (slection = BEGIN)


 Pour chaque lignei (i=1 m) faire :
pour j=1 n faire : si slectionj est vrifie, excuter actionj
 Excute la fin de lecture du fichier (slection = END)
Remarque : si slectionj absente, excuter actionj pour toutes les lignes

UNIX : La programmation AWK

A. EDED-DBALI

awk - principe de fonctionnement




awk spare les lignes en champs selon le sparateur


FS (Field Separator : par dfaut espace)
Ligne1

champ champ champ

Lignei

champ champ champ

toute la ligne
$1

NR=i
Lignen

$0

$2

$NF

champ champ champ

NF : Nombre de champs d'une ligne


NR : Numro de la ligne en court
UNIX : La programmation AWK

A. EDED-DBALI

Quelques exemples


$ awk 'length > 72' fich


Affiche les lignes de fich de longueur > 72

$ awk '/debut/,/fin/' fich


Affiche les lignes de fich entre debut et fin

$ awk '{ print $2, $1 }' fich


Affiche les champs 2 et 1 (dans cet ordre) de toutes les lignes
de fich

$ awk -F: '$7 ~ /ksh/ {print $1}' /etc/passwd


Affiche les noms de login (1er champ) des utilisateurs utilisant
ksh comme shell (7me champ) de connexion

$ ps -ef | awk '/nom/ {print $2}'


Affiche les numros des processus contenant la chane nom

UNIX : La programmation AWK

A. EDED-DBALI

Ligne de commande awk





awk [-F ifs] [-f prog_file]... [-v var=val]... [argument]...


awk [-F ifs] [-v var=val]... ['prog_text'] [argument]...
-F ifs : Dfinit ifs comme le sparateur de champs en entre (ifs :
input field separator). ifs peut tre une expression rgulire (par
dfaut espace)
Le programme peut tre stock dans un fichier (prog_file) ou crit
dans la ligne de commande entre apostrophes (prog_text)
-v var=val : affecte val var avant le dbut du programme (avant
mme la partie BEGIN)
argument :
Fichier(s) entre. Si pas de fichier ou le signe -, c'est l'entre
standard qui est considre
var=val : comme v var=val sauf que :
si avant le nom du fichier en entre, var prend effet aprs BEGIN
si aprs le nom du fichier en entre, var prend effet avant END

UNIX : La programmation AWK

A. EDED-DBALI

Script awk indpendant





Commencer le programme awk par la chane :


#!chemin absolu de awk f (#!/usr/bin/awk -f)
Faire suivre par des commentaires pertinents
Un commentaire commence par # et se termine par la fin de
ligne
Exemple :
#!/usr/bin/awk f
# ksh_users : liste des utilisateurs du KornShell
# usage : ksh_users
# @(#) ksh_users: KSH users on local system (v 1.0)
$7 ~ /ksh/ {print $1}
$ what ksh_users
ksh_users: KSH users on local system (v 1.0)
$ ksh_users /etc/passwd
adam
durand

UNIX : La programmation AWK

A. EDED-DBALI

Syntaxe des slections




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

$n ~ /expression/ (ou $n !~ /expression/)


Slection vrifie si le champ n vrifie (ou ne vrifie pas)
l'expression
Exemple :
$2 ~ /^[0-9]/ : le champ 2 commence par un chiffre
$1 ~ /^[0-9].*[a-z]$/ : le champ 1 commence par un
chiffre et se termine par une lettre minuscule
UNIX : La programmation AWK

A. EDED-DBALI

Syntaxe des slections




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)

Relation entre expressions arithmtiques :


($1+$2)/2 >=10
vraie si la moyenne des deux premiers champs est 10

UNIX : La programmation AWK

A. EDED-DBALI

Combinaison de slections


A l'aide des oprateurs logiques :


&& (et) : /chane/ && $1 ~ /^[01]/
La ligne contient chane et le 1er champ commence par O ou 1

|| (ou) : NR == 10 || NF == 5
La ligne 10 ou le nombre de champs = 5

! (ngation) : ! /chane/ && NF < 5


La ligne ne contient pas chane et le nombre de champs < 5

() (fixer l'ordre d'valuation) :


(/chane1/ || /chane2/) && /chane3/
La ligne contient chane1 ou chane2 en plus de chane3


A l'aide des intervalles :


, (virgule : dfinition de bloc)
/dbut/,/fin/ || NR==20,NR==30
Toutes les lignes entre la premire qui contient dbut et la premire qui
contient fin ou les lignes entre la 20me et la 30me

UNIX : La programmation AWK

A. EDED-DBALI

Expressions rgulires


Les caractres suivants ont une signification


particulire pour dfinir une expression rgulire :
Caractre
.
[
[^
]
^
$
\(
\)

UNIX : La programmation AWK

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]$/

/^$/

UNIX : La programmation AWK

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

Combinaisons d'expressions rgulires




Il est possible d'tendre l'expressivit d'une expression rgulire


en utilisant les caractres suivants

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

UNIX : La programmation AWK

12

A. EDED-DBALI

Expressions manipules dans les actions




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)),

Les nombres : 1, -2, 1.5, 0.15e-1,


Les valeurs logiques : 0 faux, 0 vrai


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

nombre d'arguments de la ligne de commande


tableau d'arguments de la ligne de commande
nom du fichier d'entre courant
nombre de champs de l'enregistrement courant
nombre d'enregistrements lus
nombre d'enregistrement du fichier courant
sparateur de champs en entre
sparateur d'enregistrements en entre
sparateur de champs en sortie
sparateur d'enregistrements
format de sortie pour les nombres
longueur de la chane reconnue par la fonction "match"
dbut de la chane reconnue par la fonction "match"
tableau des variables d'environnement du shell

""
"\n"
""
"\n"
"%.6g"
-

UNIX : La programmation AWK

14

A. EDED-DBALI

Oprateurs arithmtiques, logiques et


d'affectation
Opration
Affectation

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 si T[i] existe, 0 sinon

$1 ~ /ER/
Correspondance ~ !~
(matching)
< <= == != x == y
Comparaison
>= >
Concatnation
UNIX : La programmation AWK

"mon" " awk"


15

=1 si champ 1 correspond
ER, 0 sinon
=1 si galit, 0 sinon
"mon awk" : pas d'oprateur
explicite
A. EDED-DBALI

Oprateurs arithmtiques, logiques et


d'affectation
Opration

Oprateurs Exemple

somme,
soustraction

+-

Signification

x + y - $2

mult., div., reste * / %

a%b

Reste de la div de a par 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

(Valeur du dernier champ) 1

Groupement

($i)++

Incrmente $i de 1

UNIX : La programmation AWK

()

16

A. EDED-DBALI

Les actions awk - print






La plupart des actions sont inspires du langage C


Les actions sont dlimites par ';' ou fin de ligne ou '}'
print [liste_expr]
liste_expr : suite d'expressions spares par des virgules
Affiche les expressions en les sparant par OFS (dfaut:
espace) et passe la ligne
Si liste_expr absent, afficher toute la ligne
Exemples :
print NR ":" $1, $NF
1:Premier Dernier (ligne 1: $1=Premier,$NF=Dernier)
2:Moi 2053
(ligne 2: $1=Moi,$NF=2053)

awk v OFS=":" '{print NR "-" $1, $NF}' fich


1-Premier:Dernier
2-Moi:2053

UNIX : La programmation AWK

17

A. EDED-DBALI

Les actions awk - printf




printf(format, liste_expr)

comme en langage C

Ecrit, sur la sortie standard, la liste d'expressions selon


format
format : chane avec des ordres de format d'affichage :
%d (entier), %6d (entier sur 6 positions), %s (chane), %10s
(chane sur 10 positions justifie droite), %-10s (idem
justifie gauche), %f (rel), %.2f (rel avec 2 chiffres aprs
la virgule), %6.3f (rel avec 6 chiffres avant et 3 chiffres aprs
la virgule), %E ou %e (affichage avec exponentielle) %X ou %x
(affichage hexadcimal), %% (affiche %), %o (affichage octal)
Exemples :
printf("|%s|--|%7s|++|%.3s|==|%-7.3s|\n",
"ABCDE", "ABCDE", "ABCDE", "ABCDE")
|ABCDE|--| ABCDE|++|ABC|==|ABC
|
printf("%3.2f %d %X %x\n", 45.457, 111, 111, 111)
45.46 111 FF ff
UNIX : La programmation AWK

18

A. EDED-DBALI

Les actions awk - sprintf




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"

UNIX : La programmation AWK

19

A. EDED-DBALI

Les actions awk - length




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

Les actions awk - index




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)

UNIX : La programmation AWK

21

A. EDED-DBALI

Les actions awk - split




split(chane, tab [, sp])


Dcompose chane dans tab en plusieurs parties
selon le sparateur sp (envoie le nombre de souschanes obtenues = taille de tab)
sp est une ER (si absent, FS par dfaut)
Exemple :
L=split("le cul-de-sac", T, "-")
L vaut 3,
T[1] vaut "le cul",
T[2] vaut "de",
T[3] vaut "sac"

UNIX : La programmation AWK

22

A. EDED-DBALI

Les actions awk - sub




sub(ER, remplacer [, cible])


Remplacer la premire plus longue sous-chane
correspondant ER dans la chane cible par la chane
remplacer (cible doit tre une variable)
Si cible absent, $0 est pris par dfaut
Si remplacer contient le caractre &, ce caractre est
remplac par la sous-chane trouve
Exemples :
Ch="moi, proie, toujours"
sub(/oi/, "e", Ch) Ch devient "me, proie, toujours"
awk '{sub(/[Dd]urand/, "& et sa femme"); print}'
Remplace, dans toutes les lignes, la premire occurrence
'Durand' (ou 'durand') par 'Durand et sa femme' (ou
'durand et sa femme')

gsubs ralise la mme opration que sub. La diffrence est


que le remplacement est global sur toute la chane cible
UNIX : La programmation AWK

23

A. EDED-DBALI

Les actions awk - substr




substr(chane, dbut [, long])


Renvoie la sous-chane de chane de longueur long
et qui commence la position dbut
Si long absent, tout le suffixe est renvoy
Exemples :
substr("Bourges", 4, 2) "rg"
substr("Ville Bourges", 4, 8) "le Bourg"
substr("Ville Bourges", 7) "Bourges"

UNIX : La programmation AWK

24

A. EDED-DBALI

Les actions awk tolower, toupper




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

UNIX : La programmation AWK

25

A. EDED-DBALI

Les actions awk fonctions mathmatiques




Il est possible d'utiliser les fonctions mathmatiques


usuelles. En voici un extrait :
Fonction

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

UNIX : La programmation AWK

26

A. EDED-DBALI

Les actions awk structures de contrle




La plupart des structures de contrle ont la mme


syntaxe et la mme smantique que celles du langage
C
Rsum :
if (expression) instructions [else instructions]
Attention : if (var = val) Ne ralise pas le test var gale
val : affecte var la valeur val, la condition a pour valeur val
(si val = 0 faux; sinon vrai)
Il faut crire : if (var == val)
while (expression) instruction
for (exprInit; exprCond; exprInc) instructions
for (variable in tableau) instruction : parcours d'un tableau
do instructions while (expression)
break : sortie de la boucle la plus immdiate

UNIX : La programmation AWK

27

A. EDED-DBALI

Les actions awk structures de contrle




continue : ne ralise pas la suite de la


boucle se branche directement sur la
condition de boucle (dans la boucle for,
ignore le reste du corps mais ralise exprInc)
Imprimer les lignes prives de leurs Ime champ :
{for(x=1; x<=NF; x++)
{
if (x == I) continue
printf($x)
}
print ""
}
{$I=""; print $0}

UNIX : La programmation AWK

28

A. EDED-DBALI

Les actions awk structures de contrle




next : stoppe le travail sur l'enregistrement courant


et passe au suivant ensuite, reprend les actions
partir du dbut du script (abandon du reste du script
pour lenregistrement courant)
Afficher les lignes de tous les fichiers sauf pour les *.log o il
faut afficher le 1er et le 3me champ :
FILENAME ~ /\.log$/ { print $1, $3; next }
{ print }

exit [expression] : arrt du traitement sur le fichier


en cours et renvoi sur la section END. expression =
code de retour du script (0 si absent)
{ instructions } : groupement d'instructions

UNIX : La programmation AWK

29

A. EDED-DBALI

Les actions awk for (var in tab)




for (variable in tableau) instruction


variable parcours les indices de tableau. Pour chaque passage,
excuter instruction
Accs aux lments du tableau : tableau[variable]
Exemple : Le mot le plus utilis en premier champ :
#Compter le nombre des diffrents 1ers mots
{NbrChamp1[$1] += 1}
#Trouver ensuite le + grand lment du tableau
END {
N=0; Mot=""
for (m in NbrChamp1)
if (NbrChamp1[m] > N) {
N = NbrChamp1[m]
Mot = m
}
print Mot " est le plus utilis et figure "
}

UNIX : La programmation AWK

30

NbrChamp1

N " fois"
A. EDED-DBALI

Tableaux




Pas de dclaration, pas besoin de prciser la taille


Tableau associatif : suite de paires (indice, valeur)
Accs aux lments d'un tableau : tableau[indice]
Si indice n'est pas dans le tableau, tableau[indice] ""
Exemples :
if (x in T)
teste si T[x] existe
if (T[x] != "") teste si T[x] existe

Affectation des valeurs dans un tableau

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

UNIX : La programmation AWK

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)

UNIX : La programmation AWK

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

UNIX : La programmation AWK

33

A. EDED-DBALI

Fonctions


Exemples :
function affiche(Nbr)
{ printf("%10.2f\n", Nbr) }
$1 ~ /donnee/ { affiche($3) }

function inv_ch(Ch, Debut)


#Inverser Ch partir de la position Debut
{if (Debut == 0)
return ""
else
return (substr(Ch,Debut,1) inv_ch(Ch,Debut-1))
}
print inv_ch("Prog Awk", length("Prog Awk"))
kwA gorP

UNIX : La programmation AWK

34

A. EDED-DBALI

Redirections des sorties




Les ordres de sortie peuvent tre redirigs


print > fichier
Redirige le rsultat vers fichier (en cration)

print >> fichier


Redirige le rsultat vers fichier (en ajout)

print | commande
Redirige le rsultat vers l'entre standard de commande

fichier et commande sont des chanes


Si fichier = "/dev/tty" sortie terminal
print | "cat 1>&2" imprime dans la sortie
standard des erreurs
UNIX : La programmation AWK

35

A. EDED-DBALI

Lecture explicite - getline




getline [var] [< fich]


Lecture du prochain enregistrement
getline (sans argument)
lecture dans $0 ($0, NF positionnes)

getline var
lecture dans var ($0, NF inchanges)

getline < fich

ou

getline var < fich

lecture partir du fichier fich

Possibilit de lecture partir dun tube :


cmd | getline

UNIX : La programmation AWK

ou

36

cmd | getline var

A. EDED-DBALI

L'outil sed (stream editor)




sed [-n] [-e cmde] [-f fich_cmdes ] [fichier]


Applique, pour chaque ligne des fichiers en entre,
la (les) commande(s) et affiche sur la sortie
standard le rsultat de ces applications
Options :
-n : crit seulement les lignes spcifies (par l'option /p
des commandes) sur la sortie standard
-e : permet de spcifier les commandes appliquer sur le
fichier. Pour viter que le shell interprte certains
caractres, il est prfrable d'encadrer les commandes
avec des ' ou des " .
-f : les commandes sont lues partir du fichier
fich_cmdes.

UNIX : La programmation AWK

37

A. EDED-DBALI

L'outil sed - syntaxe des lignes de commandes




Une ligne de commande sed est de la forme :


adresse_ligne commande
adresse_ligne :
absente
num
num1,num2
ER
ER1,ER2

UNIX : La programmation AWK

toutes les lignes


ligne num (la dernire ligne : $)
lignes entre les lignes num1 et num2
lignes correspondant l'expression
rgulire ER
lignes entre la premire ligne
correspondant l'expression rgulire ER1
et la premire ligne correspondant
l'expression rgulire ER2
38

A. EDED-DBALI

L'outil sed - les commandes




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

L'outil sed - les commandes




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"

UNIX : La programmation AWK

40

A. EDED-DBALI

L'outil sed - les commandes




Insertion : i, a
i\
texte

insrer texte avant la ligne


correspondant la caractrisation

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

UNIX : La programmation AWK

quitter
crire les numros de lignes
crire dans fichier
41

A. EDED-DBALI

Conseils de bon usage





Donner l'extension .awk aux programmes awk


Structurer le programme avec des fonctions
Mettre les plus utilises dans des fichiers spars et
les inclure en ligne de commande par f (en plus du
programme awk) :
$ awk f mon_prog.awk f $HOME/lib/awk/mes_fcts.awk fich





Paramtrer le programme en prvoyant options


et arguments en l'incluant dans un script shell
Commenter le programme
Produire des messages d'erreurs standardiss :

fichier entre : [numro de ligne] message court mais pertinent

UNIX : La programmation AWK

42

A. EDED-DBALI

Conseils de bon usage




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)

En cas de manipulation de fichiers temporaires :

Penser les dtruire aprs usage (fonction mnage)


Les nommer de faon unique (utiliser les valeurs $0, $$, RANDOM,
etc. si cration dans un script shell, utiliser FILENAME, rand(), etc. si
cration dans script AWK)
Pour plus de clart, les manipuler travers des variables

UNIX : La programmation AWK

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

ESC : revenir en mode commande

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

Vous aimerez peut-être aussi