Slik lar du Awk bruke Shell-variabler - del 11


Når vi skriver shell-skript, inkluderer vi vanligvis andre mindre programmer eller kommandoer som Awk-operasjoner i skriptene våre. Når det gjelder Awk, må vi finne måter å overføre noen verdier fra skallet til Awk-operasjoner.

Dette kan gjøres ved å bruke skallvariabler i Awk-kommandoer, og i denne delen av serien skal vi lære hvordan vi lar Awk bruke skallvariabler som kan inneholde verdier vi ønsker å overføre til Awk-kommandoer.

Det er muligens to måter du kan aktivere Awk for å bruke skallvariabler:

1. Bruke Shell Quoting

La oss ta en titt på et eksempel for å illustrere hvordan du faktisk kan bruke shell-sitering for å erstatte verdien av en shell-variabel i en Awk-kommando. I dette eksemplet ønsker vi å søke etter et brukernavn i filen /etc/passwd, filtrere og skrive ut brukerens kontoinformasjon.

Derfor kan vi skrive et test.sh-skript med følgende innhold:

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

Deretter lagrer du filen og avslutter.

Tolkning av Awk-kommandoen i test.sh-skriptet ovenfor:

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

"/$username/ " – shell-sitering brukes til å erstatte verdien av shell-variabelen brukernavn i Awk-kommandoen. Verdien til brukernavn er mønsteret som skal søkes i filen /etc/passwd.

Merk at det doble anførselstegn er utenfor Awk-skriptet, ‘{ print $0 }’.

Gjør deretter skriptet kjørbart og kjør det som følger:

chmod  +x  test.sh
./text.sh 

Etter å ha kjørt skriptet, vil du bli bedt om å angi et brukernavn, skriv inn et gyldig brukernavn og trykk Enter. Du vil se brukerens kontodetaljer fra /etc/passwd-filen som nedenfor:

2. Bruk av Awks variabeltilordning

Denne metoden er mye enklere og bedre sammenlignet med metode en ovenfor. Med tanke på eksemplet ovenfor, kan vi kjøre en enkel kommando for å utføre jobben. Under denne metoden bruker vi -v-alternativet for å tilordne en shell-variabel til en Awk-variabel.

Først lager du en shell-variabel, brukernavn, og tilordner den navnet vi vil søke i filen /etc/passswd:

username="aaronkilik"

Skriv deretter kommandoen nedenfor og trykk Enter:

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

Forklaring av kommandoen ovenfor:

  1. -v – Awk-alternativ for å erklære en variabel
  2. brukernavn – er shell-variabelen
  3. name – er Awk-variabelen

La oss ta en nøye titt på $0 ~ navn inne i Awk-skriptet, ' $0 ~ navn {print $0}'. Husk at når vi dekket Awk-sammenligningsoperatorer i del 4 av denne serien, var en av sammenligningsoperatorene verdi ~-mønster, som betyr: sant hvis verdien samsvarer med mønsteret.

output($0) til cat-kommandoen som sendes til Awk samsvarer med mønsteret (aaronkilik) som er navnet vi søker etter i /etc/passwd , som et resultat er sammenligningsoperasjonen sann. Linjen som inneholder brukerens kontoinformasjon skrives deretter ut på skjermen.

Konklusjon

Vi har dekket en viktig del av Awk-funksjoner, som kan hjelpe oss med å bruke skallvariabler i Awk-kommandoer. Mange ganger vil du skrive små Awk-programmer eller kommandoer i shell-skript, og derfor må du ha en klar forståelse av hvordan du bruker shell-variabler i Awk-kommandoer.

I neste del av Awk-serien skal vi dykke inn i enda en kritisk del av Awk-funksjoner, det er flytkontrollutsagn. Så følg med og la oss fortsette å lære og dele.