awk bien determinier

Pages: 15 (3683 mots) Publié le: 28 août 2014
Université d’Orléans

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

© A. ED-DBALI

awk - principe de fonctionnement
Forme générale d’un programme awk :
Fichier en entrée

Programme awk

BEGIN {action début}

Ligne1



sélection1 {action1}

sélectionn {actionn}

Lignem

END {action fin}

Ligne2

Exécutée avant le début de lecture du fichier(sélection = BEGIN)
Pour chaque lignei (i=1 à m) faire :
pour j=1 à n faire : si sélectionj est vérifiée, exécuter actionj
Exécutée à la fin de lecture du fichier (sélection = END)
Remarque : si sélectionj absente, exécuter actionj pour toutes les lignes
UNIX : La programmation AWK

2

© A. ED-DBALI
ED-

awk - principe de fonctionnement
awk sépare les lignes en champs selon le séparateurFS (Field Separator : par défaut 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 : Numéro de la ligne en court
UNIX : La programmation AWK

3

© A. ED-DBALI
ED-

Quelques exemples
$ awk 'length > 72' fich
• Affiche les lignes de fich delongueur > à 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 (7ème champ) de connexion

$ ps -ef | awk '/nom/ {print $2}'
•Affiche les numéros des processus contenant la chaîne nom
UNIX : La programmation AWK

4

© A. ED-DBALI
ED-

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 : Définit ifs comme le séparateur de champs en entrée (ifs :
input field separator). ifs peut être une expression régulière (pardéfaut 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 début du programme (avant
même la partie BEGIN)
• argument :
– Fichier(s) entrée. Si pas de fichier ou le signe -, c'est l'entrée
standard qui est considérée
– var=val : comme –v var=val sauf que :
• si avantle nom du fichier en entrée, var prend effet après BEGIN
• si après le nom du fichier en entrée, var prend effet avant END
UNIX : La programmation AWK

5

© A. ED-DBALI
ED-

Script awk indépendant
Commencer le programme awk par la chaîne :
#!chemin absolu de awk –f (#!/usr/bin/awk -f)
Faire suivre par des commentaires pertinents
• Un commentaire commence par # et se termine par lafin 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

6

© A. ED-DBALI
ED-

Syntaxe des sélections
Expressionrégulière
• /expression/
– Sélection vérifiée si la ligne vérifie l’expression régulière
– 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/)
– Sélection vérifiée si le champ n vérifie (ou ne vérifie pas)
l'expression
– Exemple :
• $2 ~ /^[0-9]/ : le champ 2 commencepar 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

7

© A. ED-DBALI
ED-

Syntaxe des sélections
Relation
• Opérateurs de relation :
• Exemples :
– $1 == "chaîne"
vraie si le premier champ est "chaîne"
– NF != 5
vraie si le nombre de champs de la ligne courante est ≠ 5
– $NF > 20...
Lire le document complet

Veuillez vous inscrire pour avoir accès au document.

Vous pouvez également trouver ces documents utiles

  • Système awk
  • bien sur
  • Bien
  • Les bien
  • Le bien
  • Bien
  • Bien
  • Bien

Devenez membre d'Etudier

Inscrivez-vous
c'est gratuit !