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:
-v
– Awk-alternativ for å erklære en variabelbrukernavn
– er shell-variabelenname
– 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.