Kako dopustiti Awk-u da koristi varijable ljuske - 11. dio


Kada pišemo shell skripte, obično uključujemo druge manje programe ili komande kao što su operacije Awk u naše skripte. U slučaju Awk-a, moramo pronaći načine za prosljeđivanje nekih vrijednosti iz ljuske u Awk operacije.

Ovo se može učiniti korištenjem shell varijabli unutar Awk komandi, au ovom dijelu serije naučit ćemo kako dozvoliti Awk-u da koristi varijable ljuske koje mogu sadržavati vrijednosti koje želimo proslijediti Awk komandama.

Postoje dva moguća načina na koje možete omogućiti Awk-u da koristi varijable ljuske:

1. Korištenje shell citata

Hajde da pogledamo primer da ilustrujemo kako zapravo možete koristiti citiranje ljuske da zamenite vrednost varijable ljuske u Awk komandi. U ovom primjeru želimo potražiti korisničko ime u datoteci /etc/passwd, filtrirati i odštampati informacije o korisničkom računu.

Stoga možemo napisati test.sh skriptu sa sljedećim sadržajem:

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

Nakon toga, sačuvajte datoteku i izađite.

Interpretacija naredbe Awk u skripti test.sh iznad:

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

"/$username/ " – navodnici ljuske koji se koriste za zamjenu vrijednosti shell varijable korisničko ime u Awk komandi. Vrijednost korisničko ime je obrazac koji se traži u datoteci /etc/passwd.

Imajte na umu da je dvostruki navodnik izvan Awk skripte, ‘{ print $0 }’.

Zatim učinite skriptu izvršnom i pokrenite je na sljedeći način:

chmod  +x  test.sh
./text.sh 

Nakon pokretanja skripte, od vas će biti zatraženo da unesete korisničko ime, unesete važeće korisničko ime i pritisnete Enter. Prikazat ćete detalje korisničkog računa iz datoteke /etc/passwd na sljedeći način:

2. Korištenje Awk-ovog dodjeljivanja varijable

Ova metoda je mnogo jednostavnija i bolja u poređenju sa prethodnom metodom. Uzimajući u obzir gornji primjer, možemo pokrenuti jednostavnu naredbu da izvršimo posao. Pod ovom metodom, koristimo opciju -v da dodijelimo varijablu ljuske varijabli Awk.

Prvo, kreirajte varijablu ljuske, korisničko ime i dodijelite joj ime koje želimo pretraživati u datoteci /etc/passswd:

username="aaronkilik"

Zatim upišite naredbu ispod i pritisnite Enter:

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

Objašnjenje gornje naredbe:

  1. -v – Awk opcija za deklarisanje varijable
  2. korisničko ime – je varijabla ljuske
  3. name – je varijabla Awk

Hajde da pažljivo pogledamo $0 ~ name unutar Awk skripte, ' $0 ~ name {print $0}'. Zapamtite, kada smo obrađivali Awk operatore poređenja u 4. dijelu ove serije, jedan od operatora poređenja bio je uzorak vrijednosti ~, što znači: istinito ako vrijednost odgovara uzorku.

output($0) cat komande dostavljene u Awk odgovara obrascu (aaronkilik) što je ime koje tražimo u /etc/passwd , kao rezultat, operacija poređenja je tačna. Linija koja sadrži informacije o korisničkom računu se zatim ispisuje na ekranu.

Zaključak

Pokrili smo važan dio Awk funkcija koje nam mogu pomoći da koristimo varijable ljuske unutar Awk komandi. Mnogo puta ćete pisati male Awk programe ili komande unutar shell skripti i stoga morate imati jasno razumijevanje kako koristiti varijable ljuske unutar Awk komandi.

U sledećem delu serije Awk, zaronimo u još jedan kritični deo Awk karakteristika, to su izjave kontrole toka. Zato ostanite sa nama i nastavimo učiti i dijeliti.