GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel d'introduction Awk - 7 exemples d'impression Awk

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

  1. Awk lit les fichiers d'entrée une ligne à la fois.
  2. Pour chaque ligne, il correspond au modèle donné dans l'ordre donné, si matches effectue l'action correspondante.
  3. Si aucun modèle ne correspond, aucune action ne sera effectuée.
  4. Dans la syntaxe ci-dessus, le modèle de recherche ou l'action sont facultatifs, mais pas les deux.
  5. 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.
  6. 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.
  7. Les accolades vides sans aucune action ne font rien. Il n'effectuera pas l'opération d'impression par défaut.
  8. 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

Sed et Awk 101 Hacks, par Ramesh Natarajan . Je passe plusieurs heures par jour sur un environnement UNIX / Linux à gérer des fichiers texte (fichiers de données, de configuration et de journalisation). J'utilise Sed et Awk pour tout mon travail de manipulation de texte. Sur la base de mon expérience Sed et Awk, j'ai écrit Sed and Awk 101 Hacks eBook qui contient 101 exemples pratiques sur diverses fonctionnalités avancées de Sed et Awk qui amélioreront votre vie UNIX / Linux. Même si vous utilisez Sed et Awk depuis plusieurs années et que vous n'avez pas lu ce livre, rendez-vous service et lisez ce livre. Vous serez étonné des capacités des utilitaires Sed et Awk.

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

Linux
  1. Tutoriel de commande cd Linux pour les débutants (8 exemples)

  2. Tutoriel Awk :Comprendre les variables Awk avec 3 exemples pratiques

  3. 4 Exemples d'instructions Awk If ( if, if else, if else if, :? )

  4. Exemples de commandes awk sous Linux

  5. Exemples de commandes lpr sous Linux

Tutoriel de commande Linux w pour débutants (5 exemples)

Tutoriel de commande Linux ss pour les débutants (8 exemples)

Commande Linux awk avec 10 exemples

Tutoriel Regex pour les exemples Linux (Sed &AWK)

Tutoriel Ping :15 exemples de commandes Ping efficaces

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques