Awk (langage)

Awk (langage)

awk

Page d'aide sur l'homonymie Pour les articles homonymes, voir Awk (homonymie).

awk — dont le nom vient des trois créateurs, Alfred Aho, Peter Weinberger et Brian Kernighan — est un langage de traitement de lignes, disponible sur la plupart des systèmes Unix et sous Windows avec Cygwin ou Gawk. Il est principalement utilisé pour la manipulation de fichiers textuels pour des opérations de recherches, de remplacement et de transformations complexes.

Awk est le plus souvent utilisé pour la production de fichiers plats aux spécifications particulières (échanges entre différents systèmes d'informations hétérogènes). Il est aussi utilisé comme "parser" de fichiers XML ou de fichiers textes pour générer des commandes SQL à partir des données extraites. Il peut être utilisé aussi pour des opérations de calculs complexes et mise en forme de données brutes pour faire des tableaux statistiques.

On distingue awk, la commande originale, du new awk nawk arrivée un peu plus tard sur le marché. Les implémentations GNU/Linux de awk, sont en fait des new awk. On trouve en général la commande awk dans /usr/bin sous Unix. Certains systèmes GNU/Linux le mettent dans /bin. En général, les deux sont dans le PATH. Cependant, on peut faire des scripts en awk, et le shebang (!#/usr/bin/awk -f) devient faux, le script est donc inutilisable si le binaire n’est pas là où on l’attend.

Il agit comme un filtre programmable prenant une série de lignes en entrée (sous forme de fichiers ou directement via l'entrée standard) et écrivant sur la sortie standard, qui peut être redirigée vers un autre fichier ou programme. Un programme Awk est composé de trois blocs distincts utilisables ou non pour le traitement d'un fichier (Pré traitement, traitement, Post traitement). Awk lit sur l'entrée ligne par ligne, puis sélectionne (ou non) les lignes à traiter par des expressions rationnelles (et éventuellement des numéros de lignes). Une fois la ligne sélectionnée, elle est découpée en champs selon un séparateur d'entrée indiqué dans le programme awk par le symbole FS (qui par défaut correspond au caractère espace ou tabulation). Puis les différents champs sont disponibles dans des variables : $1 (premier champ), $2 (deuxième champ), $3 (troisième champ), ..., $NF (dernier champ).

« awk » est aussi l'extension de nom de fichier utilisée pour les scripts écrits dans ce langage (rarement utilisée).

La syntaxe est inspirée du C :
awk [options] [programme] [fichier]
où la structure du programme est :
'motif1 { action1 } motif2 { action2 } ...'
Chaque ligne du fichier est comparée successivement aux différents motifs (le plus souvent des expressions rationnelles, et globalement une expression booléenne) et l'action du premier motif renvoyant la valeur vraie est exécutée. Dans ce cas, ou si aucun motif n'est accepté, le programme lit la ligne suivante du fichier et la compare aux motifs en partant du premier.

Quelques options :

  • -F séparateur : permet de modifier le séparateur de champs ;
  • -f fichier : lit le programme à partir d'un fichier.
  • -v awkVar=$shellVar : Permet de facilement intégrer des variables du shell dans le code awk.

Sommaire

Description détaillée

Un fichier est divisé en lignes (records en anglais) elles-mêmes divisées en champs (fields en anglais)

  • lignes : séparateur <newline> ; compteur NR.
  • champs : séparateur espace ou tabulation ; compteur NF.

Les séparateurs d'entrée-sortie sont stockés dans des variables et peuvent être modifiés :

  • lignes : variables RS et ORS
  • champs : variables FS et OFS

Pour retourner le ne champ :

  • $nn est un entier strictement positif ;
  • $0 retourne la ligne entière.

Deux masques spéciaux :

  • BEGIN : définit un programme avant de commencer l'analyse du fichier ;
  • END : définit un programme après l'analyse.

Pour définir un intervalle, on utilise la virgule comme ceci :

  • NR == 1, NR == 10 : l'action associée sera appliquée aux lignes 1 à 10.

Plusieurs fonctions sont déjà implémentées :

  • print, printf : fonctions d'affichage ;
  • cos(expr), sin(expr), exp(expr), log(expr) ;
  • getline() : lit l'entrée suivante d'une ligne, retourne 0 si fin de fichier (EOF : end of file), 1 sinon ;
  • index(s1, s2) : retourne la position de la chaîne s2 dans s1, retourne 0 si s2 ne figure pas dans s1 ;
  • int(expr) : partie entière d'une expression ;
  • length(s) : longueur de la chaîne s ;
  • substr(s,n,l) : retourne une partie de la chaine de caractère s commençant à la position n, et d'une longueur l.

Structures de contrôles : la syntaxe provient directement du C :

  • if (test) {actions} else {actions}
  • while (test) {actions}
  • do {actions} while (test)
  • for (expr1;expr2;expr3) {actions}

Quelques exemples

  • awk '{print $0}' fichier : affiche toutes les lignes de fichier (idem que cat fichier).
  • awk '/2/ {print $0}' ref.txt : affiche toutes les lignes où le caractère 2 est présent (idem que grep '2' ref.txt).
  • awk '$1~/2/ {print $0}' ref.txt : affiche toutes les lignes où le caractère 2 est présent dans le premier champ.
  • awk '{print NR ":", $0}' fichier : affiche le contenu de fichier, mais chaque ligne est précédée de son numéro.
  • awk -F : '{print $1}' /etc/passwd : renvoie la liste des utilisateurs (idem cut -d : -f 1 /etc/passwd).
  • awk 'BEGIN {FS = ":"}{print $1}' /etc/passwd : idem que la précédente commande
  • awk '{s=s+$1} END {print s}' fichier : écrit la somme de tous les nombres de la première colonne de fichier.
  • awk '/Motif1/ , /Motif2/' fichier : écrit toutes les lignes contenues dans le fichier entre le Motif1 et le Motif2.

Implémentation

Il existe divers programmes qui utilisent la syntaxe du awk original, voici les plus connus :

  • nawk (abréviation de new awk) qui étend les fonctionnalités de la version initiale ;
  • mawk une version connue pour sa rapidité dans certains cas ;
  • gawk la version du GNU disponible sous les principaux OS, avec une modification qui existe pour travailler sur le réseau TCP/IP ;
  • jawk une version fonctionnant sur la machine virtuelle Java.

Voir aussi

  • Sed, ancêtre de Awk, mais toujours en activité.

Liens externes

Bibliographie

  • Alfred V. Aho, Peter J. Weinberger et Brian W. Kernighan (1985), AWK Langage de programmation, ISBN 2-87908-110-6
  • Pour plus d'informations Shellunix.com


  • Portail de la programmation informatique Portail de la programmation informatique
Ce document provient de « Awk ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Awk (langage) de Wikipédia en français (auteurs)

Игры ⚽ Нужен реферат?

Regardez d'autres dictionnaires:

  • Awk — Pour les articles homonymes, voir Awk (homonymie). awk dont le nom vient des trois créateurs, Alfred Aho, Peter Weinberger et Brian Kernighan est un langage de traitement de lignes, disponible sur la plupart des systèmes Unix et sous Windows avec …   Wikipédia en Français

  • awk — Pour les articles homonymes, voir Awk (homonymie). awk dont le nom vient des trois créateurs, Alfred Aho, Peter Weinberger et Brian Kernighan est un langage de traitement de lignes, disponible sur la plupart des systèmes Unix et sous Windows avec …   Wikipédia en Français

  • Awk (homonymie) — AWK {{{image}}}   Sigles d une seule lettre   Sigles de deux lettres > Sigles de trois lettres AAA à DZZ EAA à HZZ IAA à LZZ MAA à PZZ QAA à TZZ UAA à XZZ …   Wikipédia en Français

  • Langage Rationnel — Pour les articles homonymes, voir Langage, Régulier et Rationnel. Les expressions rationnelles permettent d engendrer une famille de langages appelés, suivant les auteurs, langages rationnels ou langages réguliers. Ce sont les langages de type 3… …   Wikipédia en Français

  • Langage régulier — Langage rationnel Pour les articles homonymes, voir Langage, Régulier et Rationnel. Les expressions rationnelles permettent d engendrer une famille de langages appelés, suivant les auteurs, langages rationnels ou langages réguliers. Ce sont les… …   Wikipédia en Français

  • Langage de programmation Tcl — Tool Command Language Pour les articles homonymes, voir Tcl. Apparu en 1988 …   Wikipédia en Français

  • Langage Perl — Perl (langage) Pour les articles homonymes, voir Perl. Apparu en 1987 …   Wikipédia en Français

  • AWK —   Sigles d’une seule lettre   Sigles de deux lettres > Sigles de trois lettres   Sigles de quatre lettres   Sigles de cinq lettres   Sigles de six lettres   Sigles de sept… …   Wikipédia en Français

  • Langage C — C (langage) Pour les articles homonymes, voir C. C …   Wikipédia en Français

  • Langage c — C (langage) Pour les articles homonymes, voir C. C …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”