Jak povolit Awk používat proměnné prostředí – část 11
Když píšeme shellové skripty, běžně do našich skriptů zařazujeme další menší programy nebo příkazy, jako jsou operace Awk. V případě Awk musíme najít způsoby, jak předávat některé hodnoty z shellu operacím Awk.
To lze provést pomocí proměnných shellu v příkazech Awk a v této části seriálu se naučíme, jak povolit Awk používat proměnné shellu, které mohou obsahovat hodnoty, které chceme předat příkazům Awk.
Existují dva způsoby, jak můžete povolit Awk používat proměnné shellu:
1. Použití Shell Quoting
Podívejme se na příklad, který ilustruje, jak můžete skutečně použít citování shellu k nahrazení hodnoty proměnné shellu v příkazu Awk. V tomto příkladu chceme vyhledat uživatelské jméno v souboru /etc/passwd, filtrovat a vytisknout informace o účtu uživatele.
Proto můžeme napsat skript test.sh
s následujícím obsahem:
#!/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 }'
Poté soubor uložte a ukončete.
Interpretace příkazu Awk ve skriptu test.sh
výše:
cat /etc/passwd | awk "/$username/ "' { print $0 }'
"/$username/ "
– citace shellu používaná k nahrazení hodnoty proměnné shellu username v příkazu Awk. Hodnota username je vzor, který se má hledat v souboru /etc/passwd.
Všimněte si, že dvojitá uvozovka je mimo skript Awk, ‘{ print $0 }‘
.
Poté vytvořte spustitelný skript a spusťte jej následovně:
chmod +x test.sh
./text.sh
Po spuštění skriptu budete vyzváni k zadání uživatelského jména, zadejte platné uživatelské jméno a stiskněte Enter. Podrobnosti o účtu uživatele ze souboru /etc/passwd zobrazíte následovně:
2. Pomocí Awk’s Variable Assignment
Tato metoda je mnohem jednodušší a lepší ve srovnání s metodou jedna výše. Vzhledem k výše uvedenému příkladu můžeme spustit jednoduchý příkaz k provedení úlohy. V rámci této metody používáme volbu -v
k přiřazení proměnné shellu k proměnné Awk.
Nejprve vytvořte proměnnou prostředí username
a přiřaďte jí název, který chceme prohledávat v souboru /etc/passswd
:
username="aaronkilik"
Poté zadejte příkaz níže a stiskněte Enter:
cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'
Vysvětlení výše uvedeného příkazu:
-v
– Volba Awk pro deklaraci proměnnéusername
– je proměnná shelluname
– je proměnná Awk
Podívejme se pozorně na $0 ~ name
uvnitř skriptu Awk, ' $0 ~ name {print $0}'
. Pamatujte, že když jsme se zabývali porovnávacími operátory Awk v části 4 této série, jedním z porovnávacích operátorů byl vzor hodnoty ~
, což znamená: true, pokud hodnota odpovídá vzoru.
output($0)
příkazu cat přesměrovaného do Awk odpovídá vzoru (aaronkilik)
, což je název, který hledáme v /etc/passwd v důsledku toho je operace porovnání pravdivá. Na obrazovce se pak vytiskne řádek obsahující informace o účtu uživatele.
Závěr
Probrali jsme důležitou část funkcí Awk, které nám mohou pomoci používat proměnné prostředí v příkazech Awk. Mnohokrát budete psát malé programy Awk nebo příkazy v rámci skriptů shellu, a proto musíte mít jasno v tom, jak používat proměnné prostředí v příkazech Awk.
V další části série Awk se ponoříme do další kritické části funkcí Awk, kterou jsou příkazy řízení toku. Takže zůstaňte naladěni a pojďme se dál učit a sdílet.