Kuinka sallia Awkin käyttää shell-muuttujia - Osa 11


Kun kirjoitamme komentosarjoja, sisällytämme komentosarjoihimme yleensä muita pienempiä ohjelmia tai komentoja, kuten Awk-operaatioita. Awkin tapauksessa meidän on löydettävä tapoja siirtää joitakin arvoja komentotulkista Awk-toimintoihin.

Tämä voidaan tehdä käyttämällä shell-muuttujia Awk-komentojen sisällä, ja tässä sarjan osassa opimme, kuinka Awk saa käyttää shell-muuttujia, jotka voivat sisältää arvoja, jotka haluamme välittää Awk-komennoille.

Voit sallia Awkin käyttää komentotulkkimuuttujia kahdella tavalla:

1. Shell Qotingin käyttäminen

Katsotaanpa esimerkkiä, joka havainnollistaa, kuinka voit itse asiassa käyttää shell-lainausta Awk-komennon shell-muuttujan arvon korvaamiseen. Tässä esimerkissä haluamme etsiä käyttäjänimeä tiedostosta /etc/passwd, suodattaa ja tulostaa käyttäjän tilitiedot.

Siksi voimme kirjoittaa test.sh-komentosarjan, jonka sisältö on seuraava:

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

Tallenna sen jälkeen tiedosto ja poistu.

Yllä olevan test.sh-komentosarjan Awk-komennon tulkinta:

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

"/$username/ " – komentotulkkilainaus, jota käytetään korvaamaan komentotulkkimuuttujan username arvo Awk-komennossa. Arvo käyttäjänimi on tiedostosta /etc/passwd haettava malli.

Huomaa, että lainausmerkki on Awk-komentosarjan ulkopuolella, '{ print $0 }'.

Tee sitten komentosarjasta suoritettava ja suorita se seuraavasti:

chmod  +x  test.sh
./text.sh 

Skriptin suorittamisen jälkeen sinua pyydetään antamaan käyttäjänimi, kirjoita kelvollinen käyttäjänimi ja paina Enter. Näet käyttäjän tilitiedot /etc/passwd-tiedostosta seuraavasti:

2. Awkin muuttujamäärityksen käyttäminen

Tämä menetelmä on paljon yksinkertaisempi ja parempi verrattuna edelliseen menetelmään. Kun otetaan huomioon yllä oleva esimerkki, voimme suorittaa yksinkertaisen komennon työn suorittamiseksi. Tässä menetelmässä käytämme -v-vaihtoehtoa määrittääksesi kuorimuuttujan Awk-muuttujalle.

Luo ensin komentotulkkimuuttuja, username ja anna sille nimi, jota haluamme etsiä /etc/passswd-tiedostosta:

username="aaronkilik"

Kirjoita sitten alla oleva komento ja paina Enter:

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

Yllä olevan komennon selitys:

  1. -v – Awk-vaihtoehto muuttujan ilmoittamiseen
  2. käyttäjänimi – on kuorimuuttuja
  3. nimi – on Awk-muuttuja

Tarkastellaanpa huolellisesti $0 ~ nimi Awk-skriptin sisällä, ' $0 ~ nimi {print $0}. Muista, että kun käsittelimme Awk-vertailuoperaattoreita tämän sarjan osassa 4, yksi vertailuoperaattoreista oli arvo ~ pattern, mikä tarkoittaa: tosi, jos arvo vastaa kuviota.

Cat-komennon output($0), joka johdetaan Awkiin, vastaa mallia (aaronkilik), jota etsimme hakemistosta /etc/passwd > tuloksena vertailuoperaatio on totta. Sen jälkeen ruudulle tulostetaan rivi, joka sisältää käyttäjän tilitiedot.

Johtopäätös

Olemme käsitelleet tärkeän osan Awk-ominaisuuksista, jotka voivat auttaa meitä käyttämään shell-muuttujia Awk-komentoissa. Usein kirjoitat pieniä Awk-ohjelmia tai komentoja shell-skripteihin, ja siksi sinulla on oltava selkeä käsitys siitä, kuinka komentotulkkimuuttujia käytetään Awk-komentoissa.

Awk-sarjan seuraavassa osassa sukeltamme vielä toiseen kriittiseen Awk-ominaisuuksien osaan, jotka ovat vuonohjauslausekkeet. Pysy siis kuulolla ja jatketaan oppimista ja jakamista.