Recherche de site Web

Apprenez à utiliser les variables Awk, les expressions numériques et les opérateurs d'affectation - Partie 8


La série de commandes Awk devient passionnante. Je pense que dans les sept parties précédentes, nous avons parcouru quelques principes fondamentaux de Awk que vous devez maîtriser pour vous permettre d'effectuer un filtrage de base de texte ou de chaîne sous Linux.

En commençant par cette partie, nous allons plonger dans les domaines avancés de Awk pour gérer des opérations de filtrage de texte ou de chaînes plus complexes. Par conséquent, nous allons aborder les fonctionnalités Awk telles que les variables, les expressions numériques et les opérateurs d'affectation.

Ces concepts ne sont pas complètement distincts de ceux que vous avez probablement rencontrés dans de nombreux langages de programmation avant tels Shell, C, Python et bien d'autres, il n'y a donc pas lieu de s'inquiéter beaucoup sur ce sujet, nous révisons simplement les idées courantes d'utilisation ces fonctionnalités mentionnées.

Ce sera probablement l’une des sections de commande Awk les plus faciles à comprendre, alors asseyez-vous et commençons.

1. Variables anormales

Dans n'importe quel langage de programmation, une variable est un espace réservé qui stocke une valeur. Lorsque vous créez une variable dans un fichier programme, au fur et à mesure de l'exécution du fichier, un espace est créé en mémoire pour stocker la valeur que vous spécifiez pour la variable.

Vous pouvez définir les variables Awk de la même manière que vous définissez les variables shell comme suit :

variable_name=value 

Dans la syntaxe ci-dessus :

  1. variable_name : est le nom que vous donnez à une variable
  2. value : la valeur stockée dans la variable

Regardons quelques exemples ci-dessous :

computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”

Jetez un œil aux exemples simples ci-dessus, dans la première définition de variable, la valeur linux-console.net est attribuée à la variable computer_name.

De plus, la valeur 22 est affectée à la variable port_no, il est également possible d'affecter la valeur d'une variable à une autre variable comme dans le dernier exemple où nous avons attribué la valeur de nom_ordinateur au serveur de variables.

Si vous vous en souvenez, dès la deuxième partie de cette série Awk où nous avons abordé l'édition de champs, nous avons expliqué comment Awk divise les lignes de saisie en champs et utilise l'opérateur d'accès aux champs standard, $ pour lire les différents champs qui ont été analysés. Nous pouvons également utiliser des variables pour stocker les valeurs des champs comme suit.

first_name=$2
second_name=$3

Dans les exemples ci-dessus, la valeur de first_name est définie sur le deuxième champ et second_name est définie sur le troisième champ.

A titre d'illustration, considérons un fichier nommé names.txt qui contient une liste des utilisateurs d'une application indiquant leurs nom et prénom ainsi que leur sexe. En utilisant la commande cat, nous pouvons afficher le contenu du fichier comme suit :

cat names.txt

Ensuite, nous pouvons également utiliser les variables first_name et second_name pour stocker le prénom et le deuxième nom du premier utilisateur de la liste comme en exécutant la commande Awk commande ci-dessous :

awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt

Jetons également un coup d'œil à un autre cas, lorsque vous exécutez la commande uname -a sur votre terminal, il imprime toutes les informations de votre système.

Le deuxième champ contient votre nom d'hôte, nous pouvons donc stocker le nom d'hôte dans une variable appelée nom d'hôte et l'imprimer en utilisant Awk comme suit :

uname -a
uname -a | awk '{hostname=$2 ; print hostname ; }' 

2. Expressions numériques

Dans Awk, les expressions numériques sont construites à l'aide des opérateurs numériques suivants :

  1. * : opérateur de multiplication
  2. + : opérateur d'addition
  3. / : opérateur de division
  4. - : opérateur de soustraction
  5. % : opérateur module
  6. ^ : opérateur d'exponentiation

La syntaxe d'une expression numérique est la suivante :

operand1 operator operand2

Dans le formulaire ci-dessus, operand1 et operand2 peuvent être des nombres ou des noms de variables, et operator est l'un des opérateurs ci-dessus.

Vous trouverez ci-dessous quelques exemples pour montrer comment créer des expressions numériques :

counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1

Pour comprendre l'utilisation des expressions numériques dans Awk, nous considérerons l'exemple suivant ci-dessous, avec le fichier domains.txt qui contient tous les domaines appartenant à Tecmint. fort>.

news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net

Pour afficher le contenu du fichier, utilisez la commande ci-dessous :

cat domains.txt

Si nous voulons compter le nombre de fois que le domaine linux-console.net apparaît dans le fichier, nous pouvons écrire un script simple pour le faire comme suit :

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Après avoir créé le script, enregistrez-le et rendez-le exécutable. Lorsque nous l'exécutons avec le fichier domains.txt comme entrée de sortie, nous obtenons le résultat suivant :

./script.sh  ~/domains.txt

À partir de la sortie du script, il y a 6 lignes dans le fichier domains.txt qui contiennent linux-console.net, pour confirmer que vous pouvez les compter manuellement.

3. Opérateurs d'affectation

La dernière fonctionnalité Awk que nous aborderons concerne les opérateurs d'affectation. Il existe plusieurs opérateurs d'affectation dans Awk et ceux-ci incluent les suivants :

  1. *= : opérateur d'affectation de multiplication
  2. += : opérateur d'affectation d'addition
  3. /= : opérateur d'affectation de division
  4. -= : opérateur d'affectation de soustraction
  5. %= : opérateur d'affectation de module
  6. ^= : opérateur d'affectation d'exponentiation

La syntaxe la plus simple d'une opération d'affectation dans Awk est la suivante :

variable_name=variable_name operator operand

Exemples:

counter=0
counter=counter+1

num=20
num=num-1

Vous pouvez utiliser les opérateurs d'affectation ci-dessus pour raccourcir les opérations d'affectation dans Awk. Considérez les exemples précédents, nous pourrions effectuer l'affectation sous la forme suivante :

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

Par conséquent, nous pouvons modifier la commande Awk dans le script shell que nous venons d'écrire ci-dessus en utilisant l'opérateur d'affectation += comme suit :

#!/bin/bash
for file in $@; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter+=1 ; printf  "%s\n",  counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Dans ce segment de la série Awk, nous avons couvert certaines fonctionnalités puissantes d'Awk, à savoir les variables, la création d'expressions numériques et l'utilisation d'opérateurs d'affectation, ainsi que quelques illustrations de la manière dont nous pouvons réellement les utiliser.

Ces concepts ne sont pas différents de ceux des autres langages de programmation, mais il peut y avoir des distinctions significatives dans la programmation Awk.

Dans la partie 9, nous examinerons davantage de fonctionnalités Awk qui sont des modèles spéciaux : BEGIN et END. D'ici là, restez connecté à Tecmint.