Ceci est le premier article sur la nouvelle série de tutoriels awk. Nous publierons plusieurs articles sur awk dans les semaines à venir qui couvriront toutes les fonctionnalités d'awk avec des exemples pratiques.
Dans cet article, passons en revue la méthodologie de travail fondamentale d'awk ainsi que 7 exemples pratiques d'impression awk.
Remarque : Assurez-vous de consulter notre précédente série de didacticiels Sed.
Awk Introduction et opérations d'impression
Awk est un langage de programmation qui permet une manipulation aisée des données structurées et la génération de rapports formatés. Awk représente les noms de ses auteurs "A salut, W einberger et K ernighan”
L'Awk est principalement utilisé pour la numérisation et le traitement de motifs. Il recherche un ou plusieurs fichiers pour voir s'ils contiennent des lignes correspondant aux modèles spécifiés, puis effectue les actions associées.
Certaines des fonctionnalités clés d'Awk sont :
- Awk considère un fichier texte comme des enregistrements et des champs.
- Comme le langage de programmation courant, Awk a des variables, des conditions et des boucles
- Awk a des opérateurs arithmétiques et de chaîne.
- Awk peut générer des rapports formatés
Awk lit à partir d'un fichier ou de son entrée standard, et sort sur sa sortie standard. Awk ne s'entend pas avec les fichiers non texte.
Syntax: awk '/search pattern1/ {Actions} /search pattern2/ {Actions}' file
Dans la syntaxe awk ci-dessus :
- le modèle de recherche est une expression régulière.
- Actions :déclaration(s) à exécuter.
- plusieurs modèles et actions sont possibles dans Awk.
- fichier - Fichier d'entrée.
- Les guillemets simples autour du programme permettent d'éviter que le shell n'interprète aucun de ses caractères spéciaux.
Méthodologie de travail Awk
- Awk lit les fichiers d'entrée une ligne à la fois.
- Pour chaque ligne, il correspond au modèle donné dans l'ordre donné, si matches effectue l'action correspondante.
- Si aucun modèle ne correspond, aucune action ne sera effectuée.
- Dans la syntaxe ci-dessus, le modèle de recherche ou l'action sont facultatifs, mais pas les deux.
- Si le modèle de recherche n'est pas donné, alors Awk exécute les actions données pour chaque ligne de l'entrée.
- Si l'action n'est pas donnée, imprimez toutes les lignes qui correspondent aux modèles donnés qui sont l'action par défaut.
- Les accolades vides sans aucune action ne font rien. Il n'effectuera pas l'opération d'impression par défaut.
- Chaque instruction dans Actions doit être délimitée par un point-virgule.
Créons un fichier employee.txt qui a le contenu suivant, qui sera utilisé dans les
exemples mentionnés ci-dessous.
$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Awk Exemple 1. Comportement par défaut d'Awk
Par défaut, Awk imprime chaque ligne du fichier.
$ awk '{print;}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Dans l'exemple ci-dessus, le motif n'est pas donné. Les actions sont donc applicables à toutes les lignes.
L'action print sans aucun argument imprime toute la ligne par défaut. Il imprime donc toutes les
lignes du fichier sans faute. Les actions doivent être placées entre accolades.
Awk Exemple 2. Imprimez les lignes qui correspondent au motif.
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
Dans l'exemple ci-dessus, il imprime toute la ligne qui correspond à 'Thomas' ou 'Nisha'. Il a deux motifs. Awk accepte n'importe quel nombre de modèles, mais chaque ensemble (modèles et actions correspondantes) doit être séparé par une nouvelle ligne.
Awk Exemple 3. Imprimer uniquement un champ spécifique.
Awk a un certain nombre de variables intégrées. Pour chaque enregistrement, c'est-à-dire la ligne, il divise l'enregistrement délimité par un caractère d'espacement par défaut et le stocke dans les variables $n. Si la ligne comporte 4 mots, elle sera stockée dans $1, $2, $3 et $4. $0 représente la ligne entière. NF est une variable intégrée qui représente le nombre total de champs dans un enregistrement.
$ awk '{print $2,$5;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 $ awk '{print $2,$NF;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000
Dans l'exemple ci-dessus, $2 et $5 représentent respectivement le nom et le salaire. Nous pouvons également obtenir le salaire en utilisant $NF, où $NF représente le dernier champ. Dans l'instruction d'impression, ',' est un concaténateur.
Awk Exemple 4. Initialisation et action finale
Awk a deux modèles importants qui sont spécifiés par le mot clé appelé BEGIN et END.
Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # is for comments in Awk
Les actions spécifiées dans la section BEGIN seront exécutées avant de commencer à lire les lignes à partir de l'entrée.
Les actions END seront effectuées après avoir terminé la lecture et le traitement des lignes à partir de l'entrée.
$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} > {print $2,"\t",$3,"\t",$4,"\t",$NF;} > END{print "Report Generated\n--------------"; > }' employee.txt Name Designation Department Salary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated --------------
Dans l'exemple ci-dessus, il imprime le titre et le dernier fichier pour les rapports.
Awk Exemple 5. Trouver les employés dont l'ID d'employé est supérieur à 200
$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Dans l'exemple ci-dessus, le premier champ ($1) est l'identifiant de l'employé. Donc, si $1 est supérieur à 200, faites simplement l'action d'impression par défaut pour imprimer toute la ligne.
Awk Exemple 6. Imprimer la liste des employés du département Technologie
Maintenant, le nom du département est disponible en tant que quatrième champ, vous devez donc vérifier si 4 $ correspond à la chaîne "Technologie", si oui, imprimez la ligne.
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
L'opérateur ~ sert à comparer avec les expressions régulières. S'il correspond à l'action par défaut, c'est-à-dire que l'impression de la ligne entière sera effectuée.
Awk Exemple 7. Imprimer le nombre d'employés dans le département Technologie
L'exemple ci-dessous, vérifie si le département est Technologie, si c'est oui, dans l'Action, incrémentez simplement la variable count, qui a été initialisée avec zéro dans la section BEGIN.
$ awk 'BEGIN { count=0;} $4 ~ /Technology/ { count++; } END { print "Number of employees in Technology Dept =",count;}' employee.txt Number of employees in Tehcnology Dept = 3
Puis à la fin du processus, il suffit d'imprimer la valeur de count qui vous donne le nombre d'employés dans le département Technologie.
Lecture recommandée
Articles Awk supplémentaires
- Variables Awk définies par l'utilisateur avec 3 exemples pratiques
- 8 puissantes variables intégrées Awk :FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- 7 exemples d'opérateurs Awk puissants (opérateurs unaires, binaires, arithmétiques, de chaîne, d'affectation, conditionnels, Reg-Ex Awk)
- 4 exemples d'instructions Awk If ( if, if else, if else if, : ? )
- Pris dans la boucle ? Awk While, Do While, For Loop, Break, Continue, Exit Exemples