Sådan tillades Awk at bruge shellvariabler - Del 11
Når vi skriver shell-scripts, inkluderer vi normalt andre mindre programmer eller kommandoer såsom Awk-operationer i vores scripts. I tilfælde af Awk er vi nødt til at finde måder at overføre nogle værdier fra skallen til Awk-operationer.
Dette kan gøres ved at bruge shellvariabler inden for Awk-kommandoer, og i denne del af serien lærer vi, hvordan Awk kan bruge shellvariabler, der kan indeholde værdier, som vi vil overføre til Awk-kommandoer.
Der er muligvis to måder, du kan aktivere Awk på at bruge shellvariabler:
1. Brug af Shell-tilbud
Lad os se på et eksempel for at illustrere, hvordan du rent faktisk kan bruge shellcitering til at erstatte værdien af en shellvariabel i en Awk-kommando. I dette eksempel vil vi søge efter et brugernavn i filen/etc/passwd, filtrere og udskrive brugerens kontooplysninger.
Derfor kan vi skrive et test.sh
script med følgende indhold:
#!/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 }'
Gem derefter filen og afslut.
Fortolkning af kommandoen Awk i scriptet test.sh
ovenfor:
cat /etc/passwd | awk "/$username/ "' { print $0 }'
"/ $ brugernavn /"
- shellcitering, der bruges til at erstatte værdien for shellvariablen brugernavn i Awk-kommandoen. Værdien af brugernavnet er det mønster, der skal søges i filen/etc/passwd.
Bemærk, at det dobbelte citat er uden for Awk-scriptet, '{print $ 0}'
.
Gør derefter scriptet eksekverbart, og kør det som følger:
$ chmod +x test.sh $ ./text.sh
Når du har kørt scriptet, bliver du bedt om at indtaste et brugernavn, skriv et gyldigt brugernavn og tryk Enter. Du vil se brugerens kontooplysninger fra/etc/passwd-filen som nedenfor:
2. Brug af Awks variable tildeling
Denne metode er meget enklere og bedre sammenlignet med metode ovenfor. I betragtning af eksemplet ovenfor kan vi køre en simpel kommando for at udføre jobbet. Under denne metode bruger vi indstillingen -v
til at tildele en shellvariabel til en Awk-variabel.
For det første skal du oprette en shellvariabel, brugernavn
, og tildele den det navn, som vi vil søge i filen /etc/passswd
:
username="aaronkilik"
Skriv derefter kommandoen nedenfor og tryk Enter:
# cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'
Forklaring til ovenstående kommando:
-
-v
- Awk-mulighed for at erklære en variabel -
brugernavn
- er shellvariablen -
navn
- er Awk-variablen
Lad os se nøje på $ 0 ~ name
inde i Awk-scriptet, $ 0 ~ name {print $ 0}
. Husk, da vi dækkede Awk-sammenligningsoperatører i del 4 af denne serie, var en af sammenligningsoperatorerne værdi ~
mønster, hvilket betyder: sand hvis værdi matcher mønsteret.
output ($ 0)
af cat-kommandoen, der ledes til Awk, matcher mønsteret (aaronkilik)
, som er det navn, vi søger efter i/etc/passwd, som et resultat, sammenligningsoperation er sand. Linjen, der indeholder brugerens kontooplysninger, udskrives derefter på skærmen.
Konklusion
Vi har dækket et vigtigt afsnit af Awk-funktioner, der kan hjælpe os med at bruge shellvariabler inden for Awk-kommandoer. Mange gange vil du skrive små Awk-programmer eller kommandoer i shell-scripts, og derfor skal du have en klar forståelse af, hvordan du bruger shellvariabler inden for Awk-kommandoer.
I den næste del af Awk-serien skal vi dykke ned i endnu et kritisk afsnit af Awk-funktioner, det vil sige flowkontrolerklæringer. Så hold dig tunet, og lad os fortsætte med at lære og dele.