Slik bruker du flytkontrollutsagn i Awk - del 12


Når du gjennomgår alle Awk-eksemplene vi har dekket så langt, helt fra starten av Awk-serien, vil du legge merke til at alle kommandoene i de forskjellige eksemplene utføres sekvensielt, det vil si den ene etter den andre. Men i visse situasjoner vil vi kanskje kjøre noen tekstfiltreringsoperasjoner basert på noen forhold, det er der tilnærmingen til flytkontrollutsagn setter inn.

Det er forskjellige flytkontrollutsagn i Awk-programmering, og disse inkluderer:

  1. if-else-uttalelse
  2. for uttalelse
  3. mens uttalelse
  4. gjør-mens-uttalelse
  5. bryte uttalelse
  6. fortsette uttalelsen
  7. neste uttalelse
  8. nextfile-erklæring
  9. utgangserklæring

For omfanget av denne serien skal vi imidlertid forklare: if-else, for, while og do while kode> uttalelser. Husk at vi allerede har gått gjennom hvordan du bruker neste setning i del 6 av denne Awk-serien.

1. If-else-erklæringen

Den forventede syntaksen til if-setningen er lik den for skallet if-setningen:

if  (condition1) {
     actions1
}
else {
      actions2
}

I syntaksen ovenfor er condition1 og condition2 Awk-uttrykk, og actions1 og actions2 er Awk-kommandoer som utføres når respektive betingelser er oppfylt.

Når betingelse1 er oppfylt, noe som betyr at det er sant, blir handlinger1 utført og if-setningen avsluttes, ellers er handlinger2 henrettet.

if-setningen kan også utvides til en if-else_if-else-setning som nedenfor:

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

For skjemaet ovenfor, hvis betingelse1 er sant, blir handlinger1 utført og if-setningen avsluttes, ellers betingelse2 blir evaluert, og hvis det er sant, blir handlinger2 utført og if-setningen avsluttes. Men når betingelse2 er usann, blir handlinger3 utført og if-setningen avsluttes.

Her er et eksempel på bruk av if-setninger, vi har en liste over brukere og deres aldre lagret i filen, brukere .txt.

Vi ønsker å skrive ut en erklæring som angir en brukers navn og om brukerens alder er under eller over 25 år.

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

Vi kan skrive et kort skallmanus for å utføre jobben vår ovenfor, her er innholdet i manuset:


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

Lagre deretter filen og avslutt, gjør skriptet kjørbart og kjør det som følger:

chmod +x test.sh
./test.sh
Eksempelutgang
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. For-erklæringen

I tilfelle du vil utføre noen Awk-kommandoer i en løkke, tilbyr for-setningen deg en passende måte å gjøre det på, med syntaksen nedenfor:

Her er tilnærmingen ganske enkelt definert ved bruk av en teller for å kontrollere løkkekjøringen, først må du initialisere telleren, deretter kjøre den mot en testbetingelse, hvis den er sann, utfør handlingene og til slutt øke telleren. Sløyfen avsluttes når telleren ikke tilfredsstiller betingelsen.

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

Følgende Awk-kommando viser hvordan for-setningen fungerer, der vi ønsker å skrive ut tallene 0-10:

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

3. Mens-erklæringen

Den konvensjonelle syntaksen for while-setningen er som følger:

while ( condition ) {
          actions
}

Betingelsen er et Awk-uttrykk og handlinger er linjer med Awk-kommandoer som utføres når betingelsen er sann.

Nedenfor er et skript for å illustrere bruken av while statement for å skrive ut tallene 0-10:

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

Lagre filen og gjør skriptet kjørbart, og kjør det deretter:

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

4. Do while Statement

Det er en modifikasjon av while-setningen ovenfor, med følgende underliggende syntaks:

do {
     actions
}
 while (condition) 

Den lille forskjellen er at under gjør mens, blir Awk-kommandoene utført før tilstanden evalueres. Ved å bruke selve eksemplet under while-setningen ovenfor, kan vi illustrere bruken av do while ved å endre Awk-kommandoen i test.sh-skriptet som følger:

#!/bin/bash

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

Etter å ha modifisert skriptet, lagre filen og avslutt. Gjør deretter skriptet kjørbart og kjør det som følger:

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

Konklusjon

Dette er ikke en omfattende veiledning angående Awk-flytkontrolluttalelser, som jeg hadde nevnt tidligere, er det flere andre flytkontrollutsagn i Awk.

Ikke desto mindre bør denne delen av Awk-serien gi deg en klar grunnleggende idé om hvordan utførelse av Awk-kommandoer kan kontrolleres basert på visse forhold.

Du kan også forklare mer om resten av flytkontrolluttalelsene for å få mer forståelse av emnet. Til slutt, i neste del av Awk-serien, skal vi gå over til å skrive Awk-manus.