Kuidas kasutada Awki voo juhtimise avaldusi - 12. osa


Kui vaatate läbi kõik Awk-i näited, mida oleme seni käsitlenud, alates tekstifiltreerimisoperatsioonide algusest, mis põhineb mõnel tingimusel, see on koht, kus voo juhtimislausete lähenemine algab.

Awk programmeerimisel on erinevaid voo juhtimise avaldusi ja need sisaldavad järgmist:

  1. väide if-else
  2. avalduse jaoks
  3. samas avaldus
  4. avaldus, kui teete,
  5. katkendlik avaldus
  6. jätka avaldust
  7. järgmine väide
  8. järgmise faili avaldus
  9. väljumisavaldus

Selle seeria ulatuse osas selgitame aga: if-else , for , while ja do while avaldused. Pidage meeles, et käisime Awk-sarjad juba läbi.

1. If-else avaldus

if lause oodatav süntaks on sarnane lause if shelliga:

if  (condition1) {
     actions1
}
else {
      actions2
}

Ülaltoodud süntaksis on tingimus1 ja tingimus2 Awk-avaldised ja toimingud1 ja toimingud2 on Awk-käsud, kui täidetakse vastavad tingimused on täidetud.

Kui tingimus1 on täidetud, see tähendab, et see on tõene, siis käivitatakse toimingud1 ja if-lause väljub, vastasel juhul käivitatakse toimingud2.

If-lauset saab laiendada ka järgmiselt: if-else_if-else -lausega:

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

Ülaltoodud vormi puhul, kui tingimus1 on tõene, siis käivitatakse toimingud1 ja if-lause väljub, vastasel juhul hinnatakse tingimust2 ja kui see on tõene, siis käivitatakse toimingud2 ja if-lause väljub. Kui tingimus2 on vale, siis käivitatakse toimingud3 ja if-lause väljub.

Siin on juhus if-lausete kasutamisel, meil on faili kasutajad user.txt salvestatud kasutajate ja nende vanuste loend.

Soovime printida avalduse, mis näitab kasutaja nime ja seda, kas kasutaja vanus on alla 25 aasta.

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

Me võime ülaltoodud tööde jaoks kirjutada lühikese shelliskripti, siin on skripti sisu:

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

Seejärel salvestage fail ja väljuge, muutke skript käivitatavaks ja käivitage see järgmiselt:

$ 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. Avalduse jaoks

Kui soovite käivitada mõned Awk-käsud tsüklis, pakub for-lause teile sobiva viisi selleks, kasutades allolevat süntaksit:

Siin määratletakse lähenemisviis lihtsalt loenduri abil tsükli täitmise kontrollimiseks, kõigepealt peate loenduri lähtestama, seejärel käivitama selle testitingimusega, kui see on tõsi, käivitage toimingud ja lõpuks loendurit suurendage. Silmus lõpeb, kui loendur ei vasta tingimusele.

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

Järgmine käsk Awk näitab, kuidas lause for töötab, kus me tahame printida numbrid 0-10:

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

3. Kuigi avaldus

Lause while tavapärane süntaks on järgmine:

while ( condition ) {
          actions
}

Tingimus on Awk avaldis ja toimingud on Awk käskude read, mis täidetakse siis, kui tingimus on tõene.

Allpool on skript, mis illustreerib lause lause kasutamist numbrite 0-10 printimiseks:

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

Salvestage fail ja tehke skript käivitatavaks, seejärel käivitage see:

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

4. Do while avaldus

See on ülaltoodud lause lause modifikatsioon järgmise süntaksiga:

do {
     actions
}
 while (condition) 

Väike erinevus seisneb selles, et käsu Awk all käivitatakse enne tingimuse hindamist käsud Awk. Kasutades ülaltoodud avalduse while näidet, saame illustreerida do while kasutamist, muutes skriptis test.sh käsku Awk järgmiselt:

#!/bin/bash

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

Pärast skripti muutmist salvestage fail ja väljuge. Seejärel tehke skript käivitatavaks ja käivitage see järgmiselt:

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

Järeldus

See ei ole ülevaatlik juhend Awki voo juhtimise lausete kohta, nagu ma juba varem mainisin, Awkis on veel mitu voo juhtimise lauset.

Sellest hoolimata peaks see Awk-seeria osa andma teile selge põhimõttelise ettekujutuse selle kohta, kuidas Awk-käskude täitmist teatud tingimustel kontrollida saab.

Te saate ka ülejäänud voo juhtimisavaldustes rohkem lahti seletada, et teemast rohkem aru saada. Lõpuks liigume Awk-sarja järgmises osas Awk-skriptide kirjutamisse.