Si të përdorni deklaratat e kontrollit të rrjedhës në Awk - Pjesa 12


Kur rishikoni të gjithë shembujt Awk që kemi mbuluar deri më tani, që nga fillimi i operacioneve të filtrimit të tekstit bazuar në disa kushte, këtu fillon qasja e deklaratave të kontrollit të rrjedhës.

Ekzistojnë deklarata të ndryshme të kontrollit të rrjedhës në programimin Awk dhe këto përfshijnë:

  1. deklaratë nëse-tjetër
  2. për deklaratë
  3. derisa deklarata
  4. deklarata do-while
  5. deklaratë thyerje
  6. vazhdoni deklaratën
  7. deklarata tjetër
  8. deklarata e skedarit tjetër
  9. deklarata e daljes

Megjithatë, për qëllimin e kësaj serie, ne do të shpjegojmë: if-else, for, while dhe do ndërsa deklaratat. Mos harroni se ne kemi kaluar tashmë nëpër seritë Awk.

1. Deklarata if-else

Sintaksa e pritur e deklaratës if është e ngjashme me atë të deklaratës së shell if:

if  (condition1) {
     actions1
}
else {
      actions2
}

Në sintaksën e mësipërme, condition1 dhe condition2 janë shprehje Awk, dhe actions1 dhe actions2 janë komanda Awk që ekzekutohen kur plotësohen kushtet përkatëse.

Kur kushti 1 plotësohet, që do të thotë se është i vërtetë, atëherë ekzekutohet actions1 dhe del deklarata if, përndryshe ekzekutohet actions2.

Deklarata if mund të zgjerohet gjithashtu në një deklaratë if-else_if-else si më poshtë:

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

Për formën e mësipërme, nëse kushti1 është true, atëherë ekzekutohet actions1 dhe del deklarata if, përndryshe vlerësohet kushti2 dhe nëse është true, atëherë ekzekutohet actions2 dhe del deklarata if. Megjithatë, kur kushti 2 është false, atëherë, veprimet3 ekzekutohen dhe deklarata if del.

Këtu është një rast në lidhje me përdorimin e deklaratave if, ne kemi një listë të përdoruesve dhe moshat e tyre të ruajtura në skedar, users.txt.

Ne duam të printojmë një deklaratë që tregon emrin e një përdoruesi dhe nëse mosha e përdoruesit është më pak ose më shumë se 25 vjeç.

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

Ne mund të shkruajmë një skrip të shkurtër shell për të kryer punën tonë më lart, këtu është përmbajtja e skenarit:

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

Pastaj ruani skedarin dhe dilni, bëjeni skriptin të ekzekutueshëm dhe ekzekutoni atë si më poshtë:

$ 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. Deklarata për

Në rast se dëshironi të ekzekutoni disa komanda Awk në një lak, atëherë deklarata for ju ofron një mënyrë të përshtatshme për ta bërë këtë, me sintaksën e mëposhtme:

Këtu, qasja përcaktohet thjesht nga përdorimi i një numëruesi për të kontrolluar ekzekutimin e lakut, së pari ju duhet të inicializoni numëruesin, pastaj ta ekzekutoni atë kundër një kushti testimi, nëse është e vërtetë, ekzekutoni veprimet dhe në fund rritni numëruesin. Cikli përfundon kur numëruesi nuk e plotëson kushtin.

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

Komanda e mëposhtme Awk tregon se si funksionon deklarata for, ku duam të printojmë numrat 0-10:

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

3. Deklarata while

Sintaksa konvencionale e deklaratës while është si më poshtë:

while ( condition ) {
          actions
}

Kushti është një shprehje Awk dhe veprimet janë linja të komandave Awk të ekzekutuara kur kushti është i vërtetë.

Më poshtë është një skenar për të ilustruar përdorimin e deklaratës while për të printuar numrat 0-10:

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

Ruani skedarin dhe bëjeni skriptin të ekzekutueshëm, më pas ekzekutojeni:

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

4. Deklarata do while

Është një modifikim i deklaratës while më sipër, me sintaksën e mëposhtme themelore:

do {
     actions
}
 while (condition) 

Ndryshimi i vogël është se, nën do while, komandat Awk ekzekutohen përpara se të vlerësohet kushti. Duke përdorur vetë shembullin nën deklaratën while më sipër, ne mund të ilustrojmë përdorimin e do while duke ndryshuar komandën Awk në skriptin test.sh si më poshtë:

#!/bin/bash

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

Pas modifikimit të skriptit, ruani skedarin dhe dilni. Pastaj bëje skriptin të ekzekutueshëm dhe ekzekutojeni si më poshtë:

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

konkluzioni

Ky nuk është një udhëzues gjithëpërfshirës në lidhje me deklaratat e kontrollit të rrjedhës Awk, siç e kisha përmendur më herët, ka disa deklarata të tjera të kontrollit të rrjedhës në Awk.

Sidoqoftë, kjo pjesë e serisë Awk duhet t'ju japë një ide të qartë themelore se si mund të kontrollohet ekzekutimi i komandave Awk bazuar në kushte të caktuara.

Ju gjithashtu mund të shpjegoni më shumë për pjesën tjetër të deklaratave të kontrollit të rrjedhës për të fituar më shumë kuptim mbi temën. Më në fund, në seksionin tjetër të serisë Awk, do të kalojmë në shkrimin e skenarëve Awk.