Sådan bruges udsendelser til flowkontrol i Awk - del 12


Når du gennemgår alle de Awk-eksempler, vi hidtil har dækket, lige fra starten af tekstfiltreringsoperationerne baseret på nogle betingelser, det er her tilgangen til flowkontroludtalelser angiver.

Der er forskellige flowkontrolerklæringer i Awk-programmering, og disse inkluderer:

  1. if-else-erklæring
  2. til erklæring
  3. mens udsagn
  4. gør-mens-erklæring
  5. brydeerklæring
  6. fortsæt erklæring
  7. næste erklæring
  8. næste filerklæring
  9. udgangserklæring

For rækkevidden af denne serie skal vi dog forklare: if-else , for , while og do while udsagn. Husk, at vi allerede har gennemgået Awk-serien.

1. If-else-erklæringen

Den forventede syntaks for if-sætningen svarer til den for shell if-sætningen:

if  (condition1) {
     actions1
}
else {
      actions2
}

I ovenstående syntaks er condition1 og condition2 Awk-udtryk, og actions1 og actions2 er Awk-kommandoer, der udføres, når de respektive betingelser er opfyldt.

Når betingelse1 er opfyldt, hvilket betyder at det er sandt, udføres handlinger1, og hvis udsagnet afsluttes, ellers udføres handlinger2.

If-sætningen kan også udvides til en if-else_if-else -sætning som nedenfor:

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

For ovenstående formular, hvis betingelse1 er sand, udføres handlinger1, og hvis udsagnet afsluttes, ellers vurderes betingelse2, og hvis det er sandt, udføres handlinger2, og hvis udsagnet afsluttes. Men når betingelse2 er falsk, udføres handlinger3, og hvis sætningen afsluttes.

Her er et eksempel på brug af if-udsagn, vi har en liste over brugere og deres aldre, der er gemt i filen, users.txt.

Vi vil udskrive en erklæring, der angiver en brugers navn, og om brugerens alder er mindre eller mere end 25 år gammel.

[email  ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

Vi kan skrive et kort shell-script for at udføre vores job ovenfor, her er indholdet af scriptet:

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

Gem derefter filen og afslut, gør scriptet eksekverbart og kør det som følger:

$ chmod +x test.sh
$ ./test.sh
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. Den til erklæring

Hvis du vil udføre nogle Awk-kommandoer i en løkke, så giver for-erklæringen dig en passende måde at gøre det på med nedenstående syntaks:

Her defineres fremgangsmåden simpelthen ved hjælp af en tæller til at styre loopudførelsen, først skal du initialisere tælleren og derefter køre den mod en testtilstand, hvis det er sandt, udføre handlingerne og til sidst øge tælleren. Sløjfen afsluttes, når tælleren ikke opfylder betingelsen.

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

Den følgende Awk-kommando viser, hvordan for-erklæringen fungerer, hvor vi vil udskrive tallene 0-10:

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

3. Mens erklæringen

Den konventionelle syntaks for while-udsagnet er som følger:

while ( condition ) {
          actions
}

Betingelsen er et Awk-udtryk, og handlinger er linjer med Awk-kommandoer, der udføres, når betingelsen er sand.

Nedenfor er et script, der illustrerer brugen af while-udsagn til at udskrive tallene 0-10:

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

Gem filen, og gør scriptet eksekverbart, og kør det derefter:

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

4. Erklæringen om gør mens

Det er en ændring af while-udsagnet ovenfor med følgende underliggende syntaks:

do {
     actions
}
 while (condition) 

Den lille forskel er, at Awk-kommandoerne under udførelse udføres, før tilstanden evalueres. Ved hjælp af selve eksemplet under while-udsagnet ovenfor kan vi illustrere brugen af do mens vi ændrer kommandoen Awk i test.sh-scriptet som følger:

#!/bin/bash

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

Når du har ændret scriptet, skal du gemme filen og afslutte. Gør derefter scriptet eksekverbart, og udfør det som følger:

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

Konklusion

Dette er ikke en omfattende guide til Awk-flowkontrolerklæringer, som jeg tidligere nævnte, er der flere andre flowkontrolerklæringer i Awk.

Ikke desto mindre skal denne del af Awk-serien give dig en klar grundlæggende idé om, hvordan udførelse af Awk-kommandoer kan styres på visse betingelser.

Du kan også uddybe mere på resten af flowkontroludtalelserne for at få mere forståelse for emnet. Endelig skal vi i det næste afsnit af Awk-serien gå over til at skrive Awk-manuskripter.