Kif tuża Dikjarazzjonijiet tal-Kontroll tal-Fluss f'Awk - Parti 12


Meta tirrevedi l-eżempji Awk kollha li koprejna s'issa, sa mill-bidu ta 'l-operazzjonijiet ta' filtrazzjoni tat-test ibbażati fuq xi kundizzjonijiet, dak huwa fejn jidħol l-approċċ tad-dikjarazzjonijiet tal-kontroll tal-fluss.

Hemm diversi dikjarazzjonijiet tal-kontroll tal-fluss fl-ipprogrammar Awk u dawn jinkludu:

  1. dikjarazzjoni jekk inkella
  2. għal dikjarazzjoni
  3. waqt li stqarrija
  4. dikjarazzjoni do-while
  5. dikjarazzjoni tal-waqfa
  6. kompli dikjarazzjoni
  7. dikjarazzjoni li jmiss
  8. dikjarazzjoni tal-fajl li jmiss
  9. dikjarazzjoni tal-ħruġ

Madankollu, għall-ambitu ta’ din is-serje, se nesponi fuq: if-else, for, while u do while kodiċi> dikjarazzjonijiet. Ftakar li diġà għaddejna minn serje Awk.

1. Id-Dikjarazzjoni jekk inkella

Is-sintassi mistennija tad-dikjarazzjoni if hija simili għal dik tad-dikjarazzjoni if tal-qoxra:

if  (condition1) {
     actions1
}
else {
      actions2
}

Fis-sintassi ta’ hawn fuq, condition1 u condition2 huma espressjonijiet Awk, u actions1 u actions2 huma kmandi Awk esegwiti meta l- kundizzjonijiet rispettivi huma sodisfatti.

Meta l-kundizzjoni1 tkun sodisfatta, jiġifieri hija vera, allura actions1 tiġi eżegwita u d-dikjarazzjoni if toħroġ, inkella actions2 tiġi eżegwita.

Id-dikjarazzjoni jekk tista' wkoll tiġi estiża għal dikjarazzjoni if-else_if-else kif hawn taħt:

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

Għall-formola ta' hawn fuq, jekk il-kundizzjoni1 hija vera, allura actions1 tiġi eżegwita u d-dikjarazzjoni if toħroġ, inkella l-kundizzjoni2 tiġi evalwata u jekk hija vera, allura l-azzjonijiet2 tiġi esegwita u l-istqarrija if toħroġ. Madankollu, meta l-kundizzjoni2 tkun falza allura, actions3 tiġi eżegwita u d-dikjarazzjoni if toħroġ.

Hawnhekk huwa każ fil-punt ta 'użu if dikjarazzjonijiet, għandna lista ta' utenti u l-etajiet tagħhom maħżuna fil-fajl, users.txt.

Irridu nipprintjaw dikjarazzjoni li tindika l-isem tal-utent u jekk l-età tal-utent hijiex inqas jew aktar minn 25 sena.

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

Nistgħu niktbu script shell qasir biex inwettqu x-xogħol tagħna hawn fuq, hawn hu l-kontenut tal-iskrittura:

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

Imbagħad issalva l-fajl u oħroġ, agħmel l-iskript eżekutibbli u mexxiha kif ġej:

$ 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. Il-għal Dikjarazzjoni

F'każ li trid tesegwixxi xi kmandi Awk f'linja, allura l-istqarrija for toffrilek mod xieraq biex tagħmel dan, bis-sintassi hawn taħt:

Hawnhekk, l-approċċ huwa sempliċement definit mill-użu ta 'counter biex jikkontrolla l-eżekuzzjoni tal-linja, l-ewwel għandek bżonn tibda l-counter, imbagħad tmexxih kontra kundizzjoni tat-test, jekk ikun veru, tesegwixxi l-azzjonijiet u finalment inkrementa l-counter. Il-linja tintemm meta l-counter ma jissodisfax il-kundizzjoni.

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

Il-kmand Awk li ġej juri kif taħdem id-dikjarazzjoni for, fejn irridu nipprintjaw in-numri 0-10:

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

3. Id-Dikjarazzjoni filwaqt

Is-sintassi konvenzjonali tad-dikjarazzjoni while hija kif ġej:

while ( condition ) {
          actions
}

Il-kundizzjoni hija espressjoni Awk u l-azzjonijiet huma linji ta 'kmandi Awk esegwiti meta l-kundizzjoni tkun vera.

Hawn taħt hawn skript biex turi l-użu tad-dikjarazzjoni while biex tipprintja n-numri 0-10:

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

Issejvja l-fajl u agħmel l-iskritt eżekutibbli, imbagħad mexxih:

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

4. Il-do while Dikjarazzjoni

Hija modifika tad-dikjarazzjoni while hawn fuq, bis-sintassi sottostanti li ġejja:

do {
     actions
}
 while (condition) 

Id-differenza żgħira hija li, taħt do while, il-kmandi Awk huma esegwiti qabel ma l-kundizzjoni tiġi evalwata. Billi nużaw l-eżempju stess taħt id-dikjarazzjoni filwaqt li hawn fuq, nistgħu nuru l-użu ta 'do while billi nbiddlu l-kmand Awk fl-iskrittura test.sh kif ġej:

#!/bin/bash

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

Wara li timmodifika l-iskrittura, issalva l-fajl u oħroġ. Imbagħad agħmel l-iskritt eżekutibbli u eżegwitu kif ġej:

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

Konklużjoni

Din mhix gwida komprensiva dwar id-dikjarazzjonijiet tal-kontroll tal-fluss Awk, kif kont semmejt qabel, hemm bosta dikjarazzjonijiet oħra tal-kontroll tal-fluss f'Awk.

Madankollu, din il-parti tas-serje Awk għandha tagħtik idea fundamentali ċara ta 'kif l-eżekuzzjoni tal-kmandi Awk tista' tiġi kkontrollata abbażi ta 'ċerti kundizzjonijiet.

Tista 'wkoll tesponi aktar dwar il-bqija tad-dikjarazzjonijiet tal-kontroll tal-fluss biex tikseb aktar fehim dwar is-suġġett. Fl-aħħarnett, fit-taqsima li jmiss tas-serje Awk, se ngħaddu biex niktbu skripts Awk.