Wéi benotzen ech Flow Kontroll Aussoen am Awk - Deel 12


Wann Dir all d'Awk Beispiller iwwerpréift, déi mir bis elo ofgedeckt hunn, direkt vum Ufank vun den Textfilteroperatioune baséiert op e puer Bedéngungen, dat ass wou d'Approche vu Flowkontroll Aussoen asetzt.

Et gi verschidde Flow Kontroll Aussoen an der Awk Programméierung an dës enthalen:

  1. wann soss Ausso
  2. fir Ausso
  3. während Ausso
  4. do-während Ausso
  5. Break Ausso
  6. weider Ausso
  7. nächst Ausso
  8. nächst Datei Ausso
  9. Exit Ausso

Wéi och ëmmer, fir den Ëmfang vun dëser Serie, wäerte mir erklären op: if-else, fir, während an maache wärend Aussoen. Denkt drun datt mir schonn duerch Awk Serie gaangen sinn.

1. D'wann-aner Ausso

Déi erwaart Syntax vun der if Ausso ass ähnlech wéi déi vun der Shell if Ausso:

if  (condition1) {
     actions1
}
else {
      actions2
}

An der uewe genannter Syntax sinn condition1 an condition2 Awk Ausdréck, an actions1 an actions2 sinn Awk Kommandoen, déi ausgefouert ginn wann de jeeweileg Konditioune sinn zefridden.

Wann Konditioun1 zefridden ass, dat heescht et ass wouer, da gëtt Actions1 ausgefouert an d'If Ausso geet eraus, soss gëtt Actions2 ausgefouert.

D'if Ausso kann och op eng if-else_if-else Ausso wéi hei ënnen erweidert ginn:

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

Fir d'Form hei uewen, wann Conditioun1 wouer ass, da gëtt Actions1 ausgefouert an d'If Ausso geet eraus, soss gëtt Conditioun2 bewäert a wann et richteg ass, da gëtt Actions2 ausgefouert an d'if Ausso geet eraus. Wéi och ëmmer, wann Konditioun2 falsch ass, ginn Actions3 ausgefouert an d'If Ausso geet eraus.

Hei ass e Fall fir ze benotzen wann Aussoen, mir hunn eng Lëscht vun de Benotzer an hiren Alter an der Datei gespäichert, users.txt.

Mir wëllen eng Ausso drécken, déi den Numm vum Benotzer uginn an ob den Alter vum Benotzer manner oder méi wéi 25 Joer al ass.

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

Mir kënnen e kuerze Shell-Skript schreiwen fir eis Aarbecht uewen auszeféieren, hei ass den Inhalt vum Skript:

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

Da späichert d'Datei a gitt eraus, maacht de Skript ausführbar a lafe se wéi follegt:

$ 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. D'fir Ausso

Am Fall wou Dir e puer Awk Kommandoen an enger Loop wëllt ausféieren, da bitt d'For Ausso Iech e passende Wee fir dat ze maachen, mat der Syntax hei drënner:

Hei ass d'Approche einfach definéiert duerch d'Benotzung vun engem Konter fir d'Loop Ausféierung ze kontrolléieren, als éischt musst Dir de Konter initialiséieren, da lafen et géint en Testbedingung, wann et richteg ass, ausféieren d'Aktiounen a schliisslech de Konter erhéijen. D'Loop endet wann de Comptoir den Zoustand net entsprécht.

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

De folgende Awk Kommando weist wéi d'For Ausso funktionnéiert, wou mir d'Zuelen 0-10 wëllen drécken:

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

3. Der iwwerdeems Ausso

Déi konventionell Syntax vun der iwwerdeems Ausso ass wéi follegt:

while ( condition ) {
          actions
}

D'Konditioun ass en Awk Ausdrock an Aktiounen sinn Zeilen vun Awk Kommandoen, déi ausgefouert ginn wann d'Konditioun wouer ass.

Drënner ass e Skript fir d'Benotzung vu während Ausso ze illustréieren fir d'Zuelen 0-10 ze drécken:

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

Späichert d'Datei a maacht de Skript ausführbar, da lafen se:

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

4. D'do iwwerdeems Ausso

Et ass eng Ännerung vun der iwwerdeems Ausso hei uewen, mat der folgender Basissyntax:

do {
     actions
}
 while (condition) 

De klengen Ënnerscheed ass datt, ënner Do iwwerdeems, d'Awk Kommandoen ausgefouert ginn ier d'Konditioun evaluéiert gëtt. Mat dem ganz Beispill ënner iwwerdeems Ausso hei uewen, kënne mir d'Benotzung vun do iwwerdeems illustréieren andeems Dir den Awk Kommando am test.sh Skript ännert wéi follegt:

#!/bin/bash

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

Nodeems Dir de Skript geännert hutt, späichert d'Datei a gitt eraus. Da maacht de Skript ausführbar an ausféiert et wéi follegt:

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

Conclusioun

Dëst ass net e komplette Guide iwwer Awk Flow Kontroll Aussoen, wéi ech virdru gesot hunn, et gi verschidde aner Flow Kontroll Aussoen am Awk.

Trotzdem soll dësen Deel vun der Awk Serie Iech eng kloer fundamental Iddi ginn wéi d'Ausféierung vun Awk Kommandoen op Basis vu bestëmmte Konditioune kontrolléiert ka ginn.

Dir kënnt och méi iwwer de Rescht vun de Flowkontroll Aussoen ausdrécken fir méi Verständnis iwwer d'Thema ze kréien. Schlussendlech, an der nächster Sektioun vun der Awk Serie, wäerte mir Awk Scripte schreiwen.