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.