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:

  1. -v - Awk-mulighed for at erklære en variabel
  2. brugernavn - er shellvariablen
  3. 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.