Cum să permiteți lui Awk să utilizeze variabile Shell - Partea 11


Când scriem scripturi shell, includem în mod normal alte programe sau comenzi mai mici, cum ar fi operațiuni Awk în scripturile noastre. În cazul lui Awk, trebuie să găsim modalități de a trece unele valori din shell la operațiunile Awk.

Acest lucru se poate face folosind variabile shell în comenzile Awk, iar în această parte a seriei, vom învăța cum să îi permitem lui Awk să folosească variabile shell care pot conține valori pe care dorim să le transmitem comenzilor Awk.

Există două moduri în care puteți activa Awk să folosească variabilele shell:

1. Utilizarea Shell Quoting

Să aruncăm o privire la un exemplu pentru a ilustra modul în care puteți utiliza de fapt citarea shell-ului pentru a înlocui valoarea unei variabile shell într-o comandă Awk. În acest exemplu, dorim să căutăm un nume de utilizator în fișierul /etc/passwd, să filtram și să imprimăm informațiile contului utilizatorului.

Prin urmare, putem scrie un script test.sh cu următorul conținut:

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

După aceea, salvați fișierul și ieșiți.

Interpretarea comenzii Awk în scriptul test.sh de mai sus:

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

"/$username/ " – ghilimele shell utilizate pentru a înlocui valoarea variabilei shell username în comanda Awk. Valoarea nume de utilizator este modelul care trebuie căutat în fișierul /etc/passwd.

Rețineți că ghilimelele duble sunt în afara scriptului Awk, ‘{ print $0 }’.

Apoi faceți scriptul executabil și rulați-l după cum urmează:

chmod  +x  test.sh
./text.sh 

După rularea scriptului, vi se va solicita să introduceți un nume de utilizator, să introduceți un nume de utilizator valid și să apăsați pe Enter. Veți vedea detaliile contului utilizatorului din fișierul /etc/passwd după cum urmează:

2. Utilizarea Atribuției variabile a lui Awk

Această metodă este mult mai simplă și mai bună în comparație cu metoda unu de mai sus. Luând în considerare exemplul de mai sus, putem rula o comandă simplă pentru a realiza lucrarea. În cadrul acestei metode, folosim opțiunea -v pentru a atribui o variabilă shell unei variabile Awk.

În primul rând, creați o variabilă shell, nume de utilizator și atribuiți-i numele pe care vrem să-l căutăm în fișierul /etc/passswd:

username="aaronkilik"

Apoi tastați comanda de mai jos și apăsați Enter:

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

Explicația comenzii de mai sus:

  1. -v – Opțiunea Awk pentru a declara o variabilă
  2. nume utilizator – este variabila shell
  3. nume – este variabila Awk

Să aruncăm o privire atentă la $0 ~ nume din scriptul Awk, ' $0 ~ nume {print $0}'. Amintiți-vă, când am acoperit operatorii de comparație Awk în partea 4 a acestei serii, unul dintre operatorii de comparație a fost modelul de valoare ~, ceea ce înseamnă: adevărat dacă valoarea se potrivește cu modelul.

ieșirea ($0) a comenzii cat transmisă către Awk se potrivește cu modelul (aaronkilik), care este numele pe care îl căutăm în /etc/passwd , ca urmare, operația de comparare este adevărată. Rândul care conține informațiile contului utilizatorului este apoi imprimat pe ecran.

Concluzie

Am acoperit o secțiune importantă a caracteristicilor Awk, care ne poate ajuta să folosim variabile shell în comenzile Awk. De multe ori, veți scrie mici programe sau comenzi Awk în cadrul scripturilor shell și, prin urmare, trebuie să înțelegeți clar cum să utilizați variabilele shell în comenzile Awk.

În următoarea parte a seriei Awk, ne vom scufunda într-o altă secțiune critică a caracteristicilor Awk, și anume declarațiile de control al fluxului. Așa că rămâneți pe fază și să continuăm să învățăm și să împărtășim.