Používanie príkazov If Else v Awk
Naučte sa používať podmienené príkazy v AWK. Pomocou if else môžete písať pokročilé AWK skripty.
AWK je výkonný skriptovací jazyk, ktorý je zabudovaný do bash shellu.
Je mimoriadne všestranný a dá sa použiť na písanie všetkých druhov skriptov na extrakciu údajov.
Podmienené príkazy sú neoddeliteľnou súčasťou každého programovacieho alebo skriptovacieho jazyka a AWK nie je iný.
V tomto návode ukážem príklady použitia príkazov if-else v AWK. Tu sú vzorové údaje, na ktorých zakladám svoje príklady.
ID | Name | Age | Subject |
---|---|---|---|
111 | Farhaan | 18 | DevOps |
89 | Alex | 21 | SecOps |
92 | Ronn | 22 | IT |
100 | Robert | 23 | Commerce |
102 | Samantha | 20 | Cloud-Admin |
105 | Bob | 21 | Maths |
Ukladám ho do students.txt
. Môžete si ho stiahnuť, ak si chcete príklady vyskúšať na vlastnej koži.
1. Príkaz if v Awk
Príkaz if kontroluje, či je podmienka pravdivá alebo nepravdivá. Ak je podmienka pravdivá, vykoná príkazy.
Tu je jednoduchá syntax pre príkaz if v awk:
awk '{if (condition) {statement} }' [input_file]
Teraz použijeme naše vzorové údaje zo súboru students.txt a vytlačíme podrobnosti o študentovi s ID 100 pomocou podmienky if v AWK.
awk '{
if ($1=="100")
{
print "............... \n";
print "Name : " ,$2;
print "Age : ",$3;
print "Department : " ,$4;
}
}' students.txt
Tu je vykonanie vyššie uvedeného príkazu awk:
Celý vyššie uvedený príkaz môže byť tiež napísaný v jednej vete takto:
awk '{ if ($1=="100") { print "............... \n"; print "Name : " ,$2; print "Age : ",$3; print "Department : " ,$4; } }' students.txt
Ale ten prvý je ľahšie čitateľný a zrozumiteľnejší.
2. Príkaz if else v Awk
V predchádzajúcom príklade bola iba jedna podmienka a jedna akcia. Príkaz if else
sa mierne líši od príkazu if
.
Všeobecný formát príkazu if else
v awk je:
awk '{
if (condition)
{command1}
else
{command2}
}' [input_file]
Ak je podmienka pravdivá, vykoná sa príkaz1 a ak je podmienka nepravda, vykoná sa príkaz2 z časti else.
Zoberme si opäť dátový súbor student.txt
.
Predpokladajme, že chcete získať celé meno študenta a jeho oddelenie, ktorého vek je menší alebo rovný 20 rokom.
Príkaz AWK môže vyzerať takto:
awk '{
if ($3<20)
{
print "Student "$2,"of department", $4, "is less than 20 years old"
}
else
{
print "Student "$2,"of department", $4, "is more than 20 years old"
}
Tu je spustenie a výstup príkladu if else:
Ako vidíte, sú tam len dvaja študenti vo veku menej ako 20 rokov. Ostatní študenti majú viac ako 20 rokov.
Vo vyššie uvedenom príklade je však problém. Za skutočné údaje považuje aj popis tabuľky a hovorí nám, že študent Meno veku Vek je viac ako 20 rokov.
Napravme to príkazom if else-if.
3. Príkaz if else-if v Awk
S príkazmi if else if príkaz awk skontroluje viacero podmienok.
Ak je prvá podmienka nepravdivá, skontroluje druhú podmienku. Ak je aj druhá podmienka nepravdivá, skontroluje sa tretia podmienka atď. Kontroluje všetky podmienky, kým nie je splnená jedna z podmienok. Ak nie je splnená žiadna podmienka, vykoná sa časť else.
if(condition1){
command1
}
else if(condition2) {
command2
}
else if(condition3) {
command3
}
.
.
.
else{
commandN
}
V predchádzajúcom príklade výstup zohľadnil aj prvý riadok údajov, ktorý je len popisom.
Dajme podmienku, aby sme skontrolovali, či je vek číslo alebo nie. Používam regulárny výraz /[0-9]+$/
, čo znamená číselné hodnoty. ~ znamená, že argument má číslo. A operátor negácie pred nimi znamená, že pole by nemalo mať číslo.
awk '{
if (! ($3 ~ /[0-9]+$/))
{
print "Age is just a number but you do not have a number"
}
else if ($3<20)
{
print "Student "$2,"of department", $4, "is less than 20 years old"
}
else
{
print "Student "$2,"of department", $4, "is more than 20 years old"
}
}' students.txt
Spustíme to a zameriame sa na prvý riadok výstupu.
Bonusový tip: Použite súbor programu awk
Ak sa vám zdá písanie dlhých programov awk v termináli priamo problematické, použite súbory awk.
Vytvorte nový súbor a pomenujte ho example.awk alebo čokoľvek iné. Na predĺžení tu nezáleží. Vďaka tomu je ľahké pochopiť, že súbor je súbor programu awk.
Obsah umiestnite medzi ''
, ktorý sa vo vyššie uvedených príkladoch nachádza hneď za awk.
{
if (! ($3 ~ /[0-9]+$/))
{
print "Age is just a number but you do not have a number"
}
else if ($3<20)
{
print "Student "$2,"of department", $4, "is less than 20 years old"
}
else
{
print "Student "$2,"of department", $4, "is more than 20 years old"
}
}
Teraz použite tento súbor awk nasledujúcim spôsobom:
awk -f example.awk students.txt
Vytvorí rovnaký výstup, aký ste videli predtým.
Viac bonusového tipu: Namiesto toho použite ternárny operátor
Namiesto použitia príkazov if else v awk môžete použiť aj ternárny operátor. Ternárne výrazy sú skrátenou verziou príkazu if-else v Awk.
Ak je podmienka pravdivá, vykoná sa príkaz1; v opačnom prípade, ak je podmienka nepravdivá, vykoná sa príkaz2.
(condition) ? Command1:Command2
Zvážte nasledujúci príklad príkazu awk:
awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txt
V tomto príklade $3
odkazuje na pole Vek
. Ak je vek menší alebo rovný 20, vytlačí sa prvý príkaz, ktorý zobrazí „Vek je menší než 20“. Ak je prvá časť False, vykoná sa druhý príkaz „Vek je nad 20 rokov“.
abhishek@LHB:~$ awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txt
Age over 20: Name
Age less than 20: Farhaan
Age over 20: Alex
Age over 20: Ronn
Age over 20: Robert
Age less than 20: Samantha
Age over 20: Bob
Záver
V tejto príručke ste sa naučili rôzne spôsoby používania príkazov if-else
v programovacom jazyku AWK. Pomocou týchto príkazov môžete riadiť tok programu, vyhodnocovať stav, extrahovať údaje zo súboru atď.
Ak potrebujete niekoľko ďalších príkladov, tento článok vám pomôže.