Travailler avec des variables, des expressions et des opérateurs Awk
La série de commandes Awk devient passionnante ! Je pense que, dans les sept parties précédentes, nous avons parcouru quelques principes fondamentaux d'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 couvrirons les fonctionnalités d'Awk telles que les variables, les expressions numériques et les opérateurs d'affectation.
Ces concepts ne sont pas très différents de ceux que vous avez pu rencontrer auparavant dans de nombreux langages de programmation, tels que Shell, C, Python et bien d'autres. Il n’y a donc pas lieu de s’inquiéter beaucoup de ce sujet ; nous révisons simplement les idées courantes d’utilisation de ces fonctionnalités.
Ce sera probablement l'une des sections de commandes 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, lors 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 :
variable_name
: est le nom que vous donnez à une variable.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 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 un 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 d'utilisateurs 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 :
*
: opérateur de multiplication+
: opérateur d'addition/
: opérateur de division-
: opérateur de soustraction%
: opérateur module^
: 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, 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 :
*=
: opérateur d'affectation de multiplication+=
: opérateur d'affectation d'addition/=
: opérateur d'affectation de division-=
: opérateur d'affectation de soustraction%=
: opérateur d'affectation de module^=
: 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 de commandes 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.
Pour ceux qui recherchent une ressource complète, nous avons compilé tous les articles de la série Awk dans un livre comprenant 13 chapitres et 41 pages, couvrant à la fois l'utilisation de base et avancée d'Awk avec des exemples pratiques.
Product Name | Price | Buy |
---|---|---|
eBook: Introducing the Awk Getting Started Guide for Beginners | $8.99 | [Buy Now] |