Kaip naudoti srauto kontrolės teiginius „Awk“ - 12 dalis


Peržiūrėdami visus iki šiol aptartus „Awk“ pavyzdžius, nuo pat teksto filtravimo operacijų, pagrįstų kai kuriomis sąlygomis, pradžios, būtent čia nustatomas srauto valdymo sakinių metodas.

„Awk“ programavime yra įvairių srauto valdymo sakinių, kurie apima:

  1. teiginys „if-else“
  2. pareiškimui
  3. o pareiškimas
  4. pareiškimas „do-while“
  5. pertraukos teiginys
  6. tęsti pareiškimą
  7. kitas teiginys
  8. kito failo teiginys
  9. išėjimo sakinys

Tačiau šios serijos apimtyje mes paaiškinsime: if-else , for , while ir do while teiginiai. Prisiminkite, kad mes jau žengėme „Awk“ serijas.

1. „If-else“ pareiškimas

Laukiama if utasítás sintaksė yra panaši į shell if sakinio sintaksę:

if  (condition1) {
     actions1
}
else {
      actions2
}

Ankstesnėje sintaksėje condition1 ir condition2 yra „Awk“ išraiškos, o actions1 ir actions2 yra Awk komandos, vykdomos, kai atitinkamos sąlygos.

Kai sąlyga1 tenkinama, vadinasi, tai tiesa, tada veiksmai1 vykdomi ir if sakinys išeina, kitaip vykdomi veiksmai2.

„If“ sakinį taip pat galima išplėsti iki if-else_if-else sakinio, kaip nurodyta toliau:

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

Anksčiau pateiktoje formoje, jei sąlyga1 yra teisinga, tada veiksmas1 vykdomas ir if sakinys išeina, priešingu atveju įvertinama sąlyga2 ir, jei ji teisinga, tada vykdomi veiksmai2 ir if sakinys išeina. Tačiau kai sąlyga2 yra klaidinga, veiksmai3 vykdomi ir if sakinys išeina.

Čia yra atvejis, kai reikia naudoti „if“ teiginius, mes turime vartotojų ir jų amžių sąrašą, saugomą faile „users.txt“.

Norime atsispausdinti pareiškimą, kuriame nurodomas vartotojo vardas ir ar vartotojo amžius yra mažesnis nei 25 metų.

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

Mes galime parašyti trumpą apvalkalo scenarijų savo darbui atlikti aukščiau, čia yra scenarijaus turinys:

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

Tada išsaugokite failą ir išeikite, padarykite scenarijų vykdomąjį ir paleiskite taip:

$ 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. Pareiškimas

Jei norite vykdyti keletą „Awk“ komandų cikle, „for“ sakinys siūlo jums tinkamą būdą tai padaryti naudodamasis žemiau esančia sintakse:

Čia požiūris yra tiesiog apibrėžtas naudojant skaitiklį, kad būtų galima valdyti kilpos vykdymą. Pirmiausia turite inicializuoti skaitiklį, tada paleisti jį prieš bandymo sąlygą, jei tai tiesa, įvykdyti veiksmus ir galiausiai padidinti skaitiklį. Kilpa baigiasi, kai skaitiklis neatitinka sąlygos.

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

Ši komanda „Awk“ parodo, kaip veikia sakinys for, kur norime atspausdinti skaičius 0–10:

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

3. Tuo metu pareiškimas

Įprastinė „while“ teiginio sintaksė yra tokia:

while ( condition ) {
          actions
}

Sąlyga yra „Awk“ išraiška, o veiksmai yra „Awk“ komandų eilutės, vykdomos, kai sąlyga yra teisinga.

Žemiau yra scenarijus, iliustruojantis „while“ teiginio naudojimą spausdinant skaičius 0–10:

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

Išsaugokite failą ir padarykite scenarijų vykdomąjį, tada paleiskite jį:

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

4. „Do while“ pareiškimas

Tai yra pirmiau pateikto teiginio „modifikacija“ su šia pagrindine sintakse:

do {
     actions
}
 while (condition) 

Nedidelis skirtumas yra tas, kad atliekant „dow“, kol „Awk“ komandos vykdomos prieš įvertinant sąlygą. Naudodami patį pavyzdį, esantį aukščiau esančiame teiginyje, galime iliustruoti „do while“ naudojimą, pakeisdami komandą „Awk“ test.sh scenarijuje taip:

#!/bin/bash

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

Pakeitę scenarijų, išsaugokite failą ir išeikite. Tada padarykite scenarijų vykdomuoju ir vykdykite taip:

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

Išvada

Tai nėra išsamus „Awk“ srauto valdymo teiginių vadovas, kaip jau minėjau anksčiau, „Awk“ yra keletas kitų srauto valdymo teiginių.

Nepaisant to, šioje „Awk“ serijos dalyje turėtumėte aiškiai suprasti, kaip Awk komandų vykdymą galima kontroliuoti remiantis tam tikromis sąlygomis.

Taip pat galite daugiau paaiškinti kitus srauto valdymo teiginius, kad gautumėte daugiau supratimo apie temą. Galiausiai kitame „Awk“ serijos skyriuje pereisime prie „Awk“ scenarijų rašymo.