Kako koristiti naredbe kontrole toka u Awku - 12. dio


Kada pregledate sve Awk primjere koje smo dosad obradili, od samog početka serije Awk, primijetit ćete da se sve naredbe u različitim primjerima izvršavaju sekvencijalno, to jest jedna za drugom. No, u određenim situacijama, možda ćemo htjeti pokrenuti neke operacije filtriranja teksta na temelju nekih uvjeta, tu se postavlja pristup naredbi kontrole toka.

U Awk programiranju postoje različite izjave za kontrolu toka, a one uključuju:

  1. izjava if-else
  2. za izjavu
  3. dok izjava
  4. naredba do-while
  5. break izjava
  6. nastavak izjave
  7. sljedeća izjava
  8. naredba nextfile
  9. izlazna izjava

Međutim, u okviru ove serije objasnit ćemo: if-else, for, while i do while izjave. Upamtite da smo već prošli kroz kako koristiti next iskaz u 6. dijelu ove Awk serije.

1. Iskaz if-else

Očekivana sintaksa if naredbe slična je sintaksi ljuske if naredbe:

if  (condition1) {
     actions1
}
else {
      actions2
}

U gornjoj sintaksi, uvjet1 i uvjet2 su Awk izrazi, a akcije1 i akcije2 su Awk naredbe koje se izvode kada odgovarajući uvjeti su zadovoljeni.

Kada je uvjet1 zadovoljen, što znači da je istinit, tada se izvršava actions1 i naredba if izlazi, inače je actions2 pogubljen.

Naredba if također se može proširiti na naredbu if-else_if-else kao u nastavku:

if (condition1){
     actions1
}
else if (conditions2){
      actions2
}
else{
     actions3
}

Za gornji obrazac, ako je uvjet1 istinit, tada se izvršavaju radnje1 i naredba if izlazi, inače uvjet2 se procjenjuje i ako je istina, izvršava se actions2 i izlazi if izjava. Međutim, kada je uvjet2 netočan, tada se izvršavaju akcije3 i naredba if izlazi.

Ovdje je primjer korištenja if izjava, imamo popis korisnika i njihove dobi pohranjene u datoteci, korisnici .txt.

Želimo ispisati izjavu u kojoj je naznačeno ime korisnika i je li korisnik mlađi ili stariji od 25 godina.

aaronkilik@tecMint ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

Možemo napisati kratku skriptu ljuske za obavljanje našeg posla iznad, evo sadržaja skripte:


#!/bin/bash
awk ' { 
        if ( $3 <= 25 ){
           print "User",$1,$2,"is less than 25 years old." ;
        }
        else {
           print "User",$1,$2,"is more than 25 years old" ; 
}
}'    ~/users.txt

Zatim spremite datoteku i izađite, učinite skriptu izvršnom i pokrenite je na sljedeći način:

chmod +x test.sh
./test.sh
Uzorak izlaza
User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old

2. Naredba for

U slučaju da želite izvršiti neke Awk naredbe u petlji, onda vam for naredba nudi prikladan način da to učinite, sa sintaksom ispod:

Ovdje je pristup jednostavno definiran upotrebom brojača za kontrolu izvršavanja petlje, prvo morate inicijalizirati brojač, zatim ga pokrenuti prema testnom uvjetu, ako je istinit, izvršiti akcije i na kraju povećati brojač. Petlja se prekida kada brojač ne zadovolji uvjet.

for ( counter-initialization; test-condition; counter-increment ){
      actions
}

Sljedeća Awk naredba pokazuje kako radi naredba for, gdje želimo ispisati brojeve 0-10:

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Uzorak izlaza
0
1
2
3
4
5
6
7
8
9
10

3. Naredba while

Uobičajena sintaksa while naredbe je sljedeća:

while ( condition ) {
          actions
}

Uvjet je Awk izraz, a akcije su linije Awk naredbi koje se izvršavaju kada je uvjet istinit.

Ispod je skripta koja ilustrira upotrebu while izjave za ispis brojeva 0-10:

#!/bin/bash
awk ' BEGIN{ counter=0 ;
         
        while(counter<=10){
              print counter;
              counter+=1 ;
             
}
}  

Spremite datoteku i učinite skriptu izvršnom, zatim je pokrenite:

chmod +x test.sh
./test.sh
Uzorak izlaza
0
1
2
3
4
5
6
7
8
9
10

4. Naredba do while

To je modifikacija while naredbe iznad, sa sljedećom temeljnom sintaksom:

do {
     actions
}
 while (condition) 

Mala je razlika u tome što se pod do while Awk naredbe izvršavaju prije nego što se procijeni uvjet. Koristeći sam primjer pod while naredbom iznad, možemo ilustrirati upotrebu do while mijenjanjem naredbe Awk u skripti test.sh kao slijedi:

#!/bin/bash

awk ' BEGIN{ counter=0 ;  
        do{
            print counter;  
            counter+=1 ;    
        }
        while (counter<=10)   
} 
'

Nakon izmjene skripte, spremite datoteku i izađite. Zatim napravite skriptu izvršnom i izvršite je na sljedeći način:

chmod +x test.sh
./test.sh
Uzorak izlaza
0
1
2
3
4
5
6
7
8
9
10

Zaključak

Ovo nije sveobuhvatan vodič u vezi s Awk izjavama kontrole toka, kao što sam ranije spomenuo, postoji nekoliko drugih izjava kontrole toka u Awku.

Bez obzira na to, ovaj dio Awk serije trebao bi vam dati jasnu temeljnu ideju o tome kako se izvršavanje Awk naredbi može kontrolirati na temelju određenih uvjeta.

Također možete objasniti više o ostatku izjava o kontroli tijeka kako biste bolje razumjeli predmet. Konačno, u sljedećem dijelu Awk serije, prijeći ćemo na pisanje Awk skripti.