Recherche de site Web

Comment autoriser Awk à utiliser des variables Shell - Partie 11


Lorsque nous écrivons des scripts shell, nous incluons normalement d'autres programmes ou commandes plus petits tels que les opérations Awk dans nos scripts. Dans le cas d'Awk, nous devons trouver des moyens de transmettre certaines valeurs du shell aux opérations Awk.

Cela peut être fait en utilisant des variables shell dans les commandes Awk, et dans cette partie de la série, nous apprendrons comment permettre à Awk d'utiliser des variables shell pouvant contenir des valeurs que nous souhaitons transmettre aux commandes Awk.

Il existe éventuellement deux manières d'autoriser Awk à utiliser des variables shell :

1. Utilisation des citations Shell

Jetons un coup d'œil à un exemple pour illustrer comment vous pouvez réellement utiliser les guillemets shell pour remplacer la valeur d'une variable shell dans une commande Awk. Dans cet exemple, nous souhaitons rechercher un nom d'utilisateur dans le fichier /etc/passwd, filtrer et imprimer les informations du compte de l'utilisateur.

Par conséquent, nous pouvons écrire un script test.sh avec le contenu suivant :

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

Ensuite, enregistrez le fichier et quittez.

Interprétation de la commande Awk dans le script test.sh ci-dessus :

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " – citation du shell utilisée pour remplacer la valeur de la variable shell username dans la commande Awk. La valeur de username est le modèle à rechercher dans le fichier /etc/passwd.

Notez que le guillemet double est en dehors du script Awk, '{ print $0 }'.

Rendez ensuite le script exécutable et exécutez-le comme suit :

chmod  +x  test.sh
./text.sh 

Après avoir exécuté le script, vous serez invité à saisir un nom d'utilisateur, saisissez un nom d'utilisateur valide et appuyez sur Entrée. Vous verrez les détails du compte de l'utilisateur à partir du fichier /etc/passwd comme ci-dessous :

2. Utilisation de l'affectation de variable d'Awk

Cette méthode est beaucoup plus simple et meilleure que la méthode ci-dessus. En considérant l'exemple ci-dessus, nous pouvons exécuter une commande simple pour accomplir le travail. Sous cette méthode, nous utilisons l'option -v pour attribuer une variable shell à une variable Awk.

Tout d'abord, créez une variable shell, username et attribuez-lui le nom que nous voulons rechercher dans le fichier /etc/passswd :

username="aaronkilik"

Tapez ensuite la commande ci-dessous et appuyez sur Entrée :

cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Explication de la commande ci-dessus :

  1. -v – Option Awk pour déclarer une variable
  2. username – est la variable shell
  3. name – est la variable Awk

Examinons attentivement $0 ~ name à l'intérieur du script Awk, ' $0 ~ name {print $0}'. N'oubliez pas que lorsque nous avons abordé les opérateurs de comparaison Awk dans la partie 4 de cette série, l'un des opérateurs de comparaison était le modèle de valeur ~, ce qui signifie : vrai si la valeur correspond au modèle.

La sortie ($0) de la commande cat transmise à Awk correspond au modèle (aaronkilik) qui est le nom que nous recherchons dans /etc/passwd , par conséquent, l'opération de comparaison est vraie. La ligne contenant les informations du compte de l’utilisateur est ensuite imprimée à l’écran.

Conclusion

Nous avons couvert une section importante des fonctionnalités d'Awk, qui peuvent nous aider à utiliser des variables shell dans les commandes Awk. Plusieurs fois, vous écrirez de petits programmes ou commandes Awk dans des scripts shell et, par conséquent, vous devez bien comprendre comment utiliser les variables shell dans les commandes Awk.

Dans la prochaine partie de la série Awk, nous plongerons dans une autre section critique des fonctionnalités d'Awk, à savoir les instructions de contrôle de flux. Alors restez à l’écoute et continuons à apprendre et à partager.