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:
- väide if-else
- avalduse jaoks
- samas avaldus
- avaldus, kui teete,
- katkendlik avaldus
- jätka avaldust
- järgmine väide
- järgmise faili avaldus
- 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.