Awk

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.

awk est un langage de programmation spécialisé dans le traitement de fichier. Il a une syntaxe assez simple.

Fonctionnement général

Les "commandes" sont de la forme :

CONDITION1 { CODE1 }
CONDITION2 { CODE2 }
CONDITION3 { CODE3 }


Pour chaque entrée des fichiers passés en paramètre (ou chaque entrée de son entrée standard), il vérifie tour à tour chaque condition. Si une condition est vrai, il exécute le code qui se trouve entre accolade. Par défaut une entrée est une ligne (séparé par un \n), mais ça peu être n'importe quel séparateur.

Entrées et champs

awk manipule des entrées et des champs. Par défaut il s'agit de lignes et de mot, mais il est possible de modifié son comportement :

  • RS="…" défini les entrées comme des morceaux de texte séparés par "…"
  • -f"…" ou FS="…" défini les champs comme des morceaux de texte séparés par "…"

Il est possible d'utiliser un (ou des) caractères différent en entrée et en sortie grâce aux variables ORS et OFS.

Variables

Pour aider le développeur, awk possède un certains nombre de variable qu'il crée lui même. Il est possible d'en créer d'autre qu'il conviendra de gérer soit même.

  • $0 représente l'entrée courante
  • $1, $2, $3,… représente les différents champs de l'entrée courante
  • FILENAME représente le nom de fichier courant
  • NR et NF représente respectivement le nombre de champ de l'entrée courante et le numéro de l'entrée

Il y en a beaucoup d'autres, je vous recommande de lire la page man pour en trouver d'autre.

Condition

Les conditions permettent d'évaluer si l'entrée courante possède certaines propriétés.

  • $0 ~ /mofit/ vérifie que la ligne contient un motif donné
  • $0 ~ !/mofit/ vérifie que la ligne ne contient pas un motif donné

Il est possible de créer des conditions plus complexes à partir d'autres conditions (par exemple ``cond1 && cond2``).

Il existe aussi des conditions spéciales qui se vérifient à des moments précis :

  • BEGIN avant d'évaluer la toute première entrée
  • END après l'évaluation de la toute dernière entrée