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:
- teiginys „if-else“
- pareiškimui
- o pareiškimas
- pareiškimas „do-while“
- pertraukos teiginys
- tęsti pareiškimą
- kitas teiginys
- kito failo teiginys
- 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.