Apprenez à utiliser AWK Special Patterns 'Begin and End' - Partie 9

Apprenez à utiliser AWK Special Patterns 'Begin and End' - Partie 9

Dans Partie 8 De cette série AWK, nous avons introduit des fonctionnalités de commande AWK puissantes, c'est-à-dire des variables, des expressions numériques et des opérateurs d'affectation.

À mesure que nous avançons, dans ce segment, nous couvrirons plus Awk Caractéristiques, et c'est les modèles spéciaux: COMMENCER et FIN.

Apprendre les modèles awk commence et finit

Ces fonctionnalités spéciales seront utiles alors que nous essayons de développer et d'explorer plus de méthodes de construction de complexes Awk opérations.

Pour commencer, laissez-nous ramener nos pensées à l'introduction du Awk série, rappelez-vous quand nous avons commencé cette série, j'ai souligné que la syntaxe générale d'un fonctionnement d'un Awk La commande est:

# awk 'script' noms de fichiers 

Et dans la syntaxe ci-dessus, le Awk Le script a la forme:

/ motif / actions 

Lorsque vous considérez le modèle dans le script, c'est normalement une expression régulière, en outre, vous pouvez également considérer le modèle comme des modèles spéciaux COMMENCER et FIN. Par conséquent, nous pouvons également écrire un Awk Commande dans le formulaire ci-dessous:

awk 'begin actions / patron / actions / patron / actions… . Fin Actions 'Noms de fichiers 

Dans le cas où vous utilisez les modèles spéciaux: COMMENCER et FIN dans un Awk script, c'est ce que signifie chacun d'eux:

  1. Commencer le schéma: signifie que AWK exécutera la ou les actions spécifiées dans COMMENCER Une fois avant toute lecture de lignes d'entrée.
  2. Modèle final: signifie que AWK exécutera la ou les actions spécifiées dans FIN Avant qu'il ne sorte réellement.

Et le flux d'exécution de l'an Awk Le script de commande qui contient ces modèles spéciaux est le suivant:

  1. Quand le COMMENCER le modèle est utilisé dans un script, toutes les actions pour COMMENCER sont exécutés une fois avant que toute ligne d'entrée ne soit lue.
  2. Ensuite, une ligne d'entrée est lue et analysée dans les différents champs.
  3. Ensuite, chacun des modèles non spéciaux spécifiés est comparé à la ligne d'entrée pour une correspondance, lorsqu'une correspondance est trouvée, la ou les actions pour ce modèle sont ensuite exécutées. Cette étape sera répétée pour tous les modèles que vous avez spécifiés.
  4. Ensuite, les étages 2 et 3 sont répétés pour toutes les lignes d'entrée.
  5. Lorsque toutes les lignes d'entrée ont été lues et traitées, au cas où vous spécifiez le FIN modèle, la ou les actions seront exécutées.

Vous devez toujours vous souvenir de cette séquence d'exécution lorsque vous travaillez avec les modèles spéciaux pour obtenir les meilleurs résultats dans un Awk opération.

Pour tout comprendre, illustrons l'utilisation de l'exemple de la partie 8, sur la liste des domaines appartenant à Tecmint, comme stocké dans un fichier nommé domaines.SMS.

nouvelles.Tecmint.com Tecmint.com Linuxsay.com Windows.Tecmint.com Tecmint.comtés com.Tecmint.com Tecmint.com Linuxsay.com Tecmint.comtés com.Tecmint.com Tecmint.com Linuxsay.com Windows.Tecmint.com Tecmint.com 
$ cat ~ / domaines.SMS 
Afficher le contenu du fichier

Dans cet exemple, nous voulons compter le nombre de fois le domaine Tecmint.com est répertorié dans le fichier domaines.SMS. Nous avons donc écrit un petit script shell pour nous aider à le faire en utilisant l'idée de variables, d'expressions numériques et d'opérateurs d'affectation qui a le contenu suivant:

#!/ bin / bash pour le fichier dans [e-mail protégé]; faire si [-f $ file]; Ensuite, #print le nom de fichier écho "le fichier est: $ fichier" #print un nombre progressivement pour chaque ligne contenant Tecmint.com awk '/ ^ tecmint.com / compteur + = 1; printf "% s \ n", compteur;  '$ Fichier Else #print Informations d'erreur INTO ENCISE ENCORE n'est pas un fichier ECHO "Le fichier $ n'est pas un fichier, veuillez spécifier un fichier."> & 2 && exit 1 fi a fait le script #terminate avec le code de sortie 0 en cas d'exécution réussie Exit 0 

Passons maintenant aux deux modèles spéciaux: COMMENCER et FIN dans le Awk Commande dans le script ci-dessus comme suit:

Nous alterons le script:

awk '/ ^ tecmint.com / compteur + = 1; printf "% s \ n", compteur;  'fichier $ 

Pour:

awk ' COMMENCER imprimer "Le nombre de fois Tecmint.com apparaît dans le fichier est: "; / ^ tecmint.com / compteur + = 1;  FIN printf "% s \ n", compteur;  'fichier $ 

Après avoir apporté les modifications au Awk Commande, le script de shell complet ressemble maintenant à ceci:

#!/ bin / bash pour le fichier dans [e-mail protégé]; faire si [-f $ file]; Puis #print le nom de fichier Echo "Fichier est: $ fichier" #print le nombre total de fois Tecmint.com apparaît dans le fichier awk ' COMMENCER imprimer "Le nombre de fois Tecmint.com apparaît dans le fichier est: "; / ^ tecmint.com / compteur + = 1;  FIN printf "% s \ n", compteur;  '$ Fichier Else #print Informations d'erreur INTO ENCISE ENCORE n'est pas un fichier ECHO "Le fichier $ n'est pas un fichier, veuillez spécifier un fichier."> & 2 && exit 1 fi a fait le script #terminate avec le code de sortie 0 en cas d'exécution réussie Exit 0 
Motifs de début et de fin awk

Lorsque nous exécutons le script ci-dessus, il imprimera d'abord l'emplacement du fichier domaines.SMS, puis le Awk Le script de commande est exécuté, où le COMMENCER Un modèle spécial nous aide à imprimer le message "Le nombre de fois Tecmint.com apparaît dans le fichier est:"Avant que toutes les lignes d'entrée ne soient lues à partir du fichier.

Puis notre modèle, / ^ Tecmint.com / est comparé à chaque ligne d'entrée et à l'action, compteur + = 1; est exécuté pour chaque ligne d'entrée, ce qui compte le nombre de fois Tecmint.com apparaît dans le fichier.

Finalement, le FIN Le modèle imprimera le total du nombre de fois le domaine Tecmint.com apparaît dans le fichier.

$ ./scénario.sh ~ / domaines.SMS 
Script pour compter le nombre de fois que la chaîne apparaît

Pour conclure, nous avons traversé plus Awk Fonctionnalités explorant les concepts du modèle spécial: COMMENCER et FIN.

Comme je l'ai déjà souligné, ces fonctionnalités AWK nous aideront à créer des opérations de filtrage de texte plus complexes, il y a plus à couvrir sous Awk caractéristiques et dans partie 10, Nous aborderons l'idée des variables intégrées awk, alors restez connecté.