Awk

Introduction
AWK est un langage de script conçu pour palier l’un des points gênant dans les scripts shell « classiques » : la multiplication de petits programmes qu’il faut faire travailler ensemble. Alors oui c’est l’un des points les plus importants de la philosophie Unix, mais ça pose aussi des problèmes de performance et de portabilité (il faut vérifier la version de chacun des programme).

Je ne suis pas là pour dire si oui ou non c’est un gros problème, mais pour vous décrire le logiciel et libre à chacun de faire son choix.

Idée principale
Avec AWK on trouve une manière très particulière de programmer. En effet là où les scripts shell classiques sont impératif (après la première instruction viens la deuxième qui précède la troisième…), awk travaille ligne par ligne.

Avec AWK on défini des blocs de code et des conditions pour savoir quand est ce qu’ils vont s’exécuter.

Vif du sujet
Condition

cond{
    code
}

Voici un bloc de code AWK. cond est évidement la condition avec la quel le bloc va s’exécuter. Le plus souvent c’est une expression régulière (fuyez pas !) entre 2 “/”. Par exemple si je veux exécuter le bloc s’exécute pour chaque lignes contenant le mot “COUCOU”, il suffit de faire :

/COUCOU/{
}

Et hop ! Voila comment remplacer grep ! En effet :

et équivalent à

découpe de ligne
La découpe de ligne consiste à découper une ligne en fonction d’un caractère séparateur (pas une expressions régulière). Pour effectuer cela il suffit d’indiquer le caractère séparateur grâce à l’option -F. Ensuite quelque soit le bloc vous pouvez accéder au champ numéro n avec la variable $n. Simple,non ?

Et hop ! Voila comment remplacer cut ! En effet :

et équivalent à

Bon si c’est juste pour ça, ça ne sert pas à grand chose…

Fonctions
L’intérêt de awk c’est que le bloc de code peut manipuler la ligne pour cela on a une série de fonctions que je ne détaillerais pas ici (man awk les décrit très bien). Par contre je peux vous indiquer que c’est avec ces fonctions que l’on peut remplacer sed.

Utilisation avancée
Pour une utilisation plus avancée je vais d’abord vous présenter deux conditions spéciales : BEGIN et END. Comme la vie est bien faite, elle servent logiquement respectivement à créer des blocs de code qui vont s’exécuter au tout début et à la toute fin du programme. Cela sert souvent à initialiser une variable dans le bloc BEGIN qui seras modifiée puis affichée dans le bloc END.

Vous pouvez aussi déclarer vos propre fonctions.

Conclusion
Voila j’espère que j’ai était un minimum compréhensible et que chacun auras pu avoir un aperçu de ce qu’est et de l’intérêt de awk même si vous ne souhaitez pas l’utiliser.

Pour les commentaires (je sais qu’il y en auras) je vous demanderais de les poster dans pause café :
viewtopic.php?f=1&t=27463

bonne idée ce tuto.
Bien que sa complete le shell, je trouve a ce moment la plus pratique de passer par un vrai language tel que le C/C++ qui permet d’utiliser le shell via system :wink: la différence c’est qu’on apprend un vrai language et donc offre plus de possibilité.

Ceci dit awk permet de faire des chose simple de manière assez pratique si sa reste occasionnel:)

[color=#FF0000]Pour les commentaires (je sais qu’il y en auras) je vous demanderais de les poster dans pause café :
viewtopic.php?f=1&t=27463

[/color]