Com permetre que Awk utilitzi variables de Shell - Part 11


Quan escrivim scripts d'intèrpret d'ordres, normalment incloem altres programes o ordres més petits com ara operacions Awk als nostres scripts. En el cas d'Awk, hem de trobar maneres de passar alguns valors de l'intèrpret d'ordres a les operacions Awk.

Això es pot fer utilitzant variables de l'intèrpret d'ordres dins de les ordres Awk, i en aquesta part de la sèrie, aprendrem a permetre que l'Awk utilitzi variables de l'intèrpret d'ordres que poden contenir valors que volem passar a les ordres Awk.

Hi ha dues maneres possibles d'habilitar Awk per utilitzar variables de shell:

1. Ús de Shell Quoting

Fem un cop d'ull a un exemple per il·lustrar com podeu utilitzar les cometes d'intèrpret d'ordres per substituir el valor d'una variable d'intèrpret d'ordres en una ordre Awk. En aquest exemple, volem cercar un nom d'usuari al fitxer /etc/passwd, filtrar i imprimir la informació del compte de l'usuari.

Per tant, podem escriure un script test.sh amb el contingut següent:

#!/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 }'

A continuació, deseu el fitxer i sortiu.

Interpretació de l'ordre Awk a l'script test.sh anterior:

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

\/$username/ \: les cometes de l'intèrpret d'ordres s'utilitzen per substituir el valor del nom d'usuari de la variable de l'intèrpret d'ordres a l'ordre Awk. El valor de nom d'usuari és el patró que s'ha de cercar al fitxer /etc/passwd.

Tingueu en compte que les cometes dobles es troben fora de l'script Awk, ‘{ print $0 }’.

A continuació, feu que l'script sigui executable i executeu-lo de la següent manera:

$ chmod  +x  test.sh
$ ./text.sh 

Després d'executar l'script, se us demanarà que introduïu un nom d'usuari, escriviu un nom d'usuari vàlid i premeu Enter. Veureu els detalls del compte de l'usuari des del fitxer /etc/passwd de la següent manera:

2. Ús de l'assignació de variables d'Awk

Aquest mètode és molt més senzill i millor en comparació amb el mètode anterior. Tenint en compte l'exemple anterior, podem executar una ordre senzilla per dur a terme la feina. Amb aquest mètode, utilitzem l'opció -v per assignar una variable de shell a una variable Awk.

En primer lloc, creeu una variable shell, username i assigneu-li el nom que volem cercar al fitxer /etc/passswd:

username="aaronkilik"

A continuació, escriviu l'ordre següent i premeu Enter:

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

Explicació de l'ordre anterior:

  1. -v: opció Awk per declarar una variable
  2. nom d'usuari: és la variable de shell
  3. nom: és la variable Awk

Fem una ullada detinguda a $0 ~ nom dins de l'script Awk, $0 ~ nom {print $0}. Recordeu, quan vam cobrir els operadors de comparació Awk a la part 4 d'aquesta sèrie, un dels operadors de comparació era el patró de valor ~, que significa: true si el valor coincideix amb el patró.

La sortida($0) de l'ordre cat enviada a Awk coincideix amb el patró (aaronkilik) que és el nom que estem cercant a /etc/passwd, com a resultat, el l'operació de comparació és certa. La línia que conté la informació del compte de l'usuari s'imprimeix a la pantalla.

Conclusió

Hem cobert una secció important de les funcions d'Awk, que ens poden ajudar a utilitzar variables de l'intèrpret d'ordres dins de les ordres Awk. Moltes vegades, escriureu petits programes o ordres Awk dins dels scripts d'intèrpret d'ordres i, per tant, heu de tenir una comprensió clara de com utilitzar les variables de l'intèrpret d'ordres dins de les ordres Awk.

A la següent part de la sèrie Awk, ens endinsarem en una altra secció crítica de les funcions d'Awk, que són les declaracions de control de flux. Així que estigueu atents i seguim aprenent i compartint.