Kad pregledate sve primjere Awka koje smo do sada obradili, od samog početka Awk serija, primijetit ćete da se sve naredbe u različitim primjerima izvršavaju uzastopno, to jest jedna za drugom. No, u određenim situacijama možda bismo htjeli pokrenuti neke operacije filtriranja teksta na temelju nekih uvjeta, tu se postavlja pristup izjavama o kontroli protoka.
Postoje različite izjave o kontroli protoka u Awk programiranje a oni uključuju:
Međutim, za opseg ove serije, izložit ćemo sljedeće: ako-drugo
, za
, dok
i učini dok
izjave. Upamtite da smo već prošli kako koristiti sljedeću izjavu u 6. dijelu od ovog Awk serija.
Očekivana sintaksa datoteke ako izjava
sličan je onom ljuske ako izjava:
if (uvjet1) {radnje1. } else {radnje2. }
U gornjoj sintaksi, uvjet1
i stanje 2
su izrazi Awk, i radnje1
i radnje2
su Awk naredbe koje se izvršavaju kada su zadovoljeni odgovarajući uvjeti.
Kada uvjet1 je zadovoljan, što znači da je to istina radnje1 izvršava se i ako izjava izlazi, inače radnje2 se izvršava.
The ako izjava također se može proširiti na a if-else_if-else
sljedeća izjava:
if (uvjet1) {radnje1. } else if (uvjeti2) {radnje2. } else {radnje3. }
Za gornji obrazac, ako uvjet1 je onda istina radnje1 izvršava se i ako izjava izlazi, inače stanje 2 se procjenjuje, a ako je istina, tada radnje2 izvršava se i ako izjava izlazi. Međutim, kada stanje 2 onda je lažno, radnje3 izvršava se i ako izjava izlazi.
Evo primjera korištenja ako izjave, imamo popis korisnika i njihovi dobi pohranjena u datoteci, users.txt.
Želimo ispisati izjavu u kojoj se navodi ime korisnika i je li njegova dob manja ili veća 25 godine star.
[zaštićena e -pošta] ~ $cat users.txt
Sarah L 35 F. Aaron Kili 40 M. John Doo 20 M. Kili Seth 49 M
Možemo napisati kratku ljuskastu skriptu za izvršavanje gore navedenog posla, evo sadržaja skripte:
#!/bin/bash. awk '{if ($ 3 <= 25) {print "User", $ 1, $ 2, "ima manje od 25 godina."; } else {print "Korisnik", 1 USD, 2 USD, "stariji je od 25 godina"; } } '~/users.txt.
Zatim spremite datoteku i izađite, učinite skriptu izvršnom i pokrenite je na sljedeći način:
$ chmod +x test.sh. $ ./test.sh.
Korisnica Sarah L ima više od 25 godina. Korisnik Aaron Kili ima više od 25 godina. Korisnik John Doo ima manje od 25 godina. Korisnica Kili Seth ima više od 25 godina.
U slučaju da želite izvršiti neke Awk naredbe u petlji, tada se za izjavu nudi vam prikladan način da to učinite, sa sintaksom u nastavku:
Ovdje je pristup jednostavno definiran upotrebom brojača za kontrolu izvođenja petlje, prvo morate inicijalizirati brojač, a zatim ga pokrenuti u odnosu na testni uvjet, ako je točan, izvršiti radnje i na kraju povećati brojač. Petlja se prekida kada brojač ne zadovoljava uvjet.
za (protuinicijalizacija; test-uvjet; kontra-prirast) {radnje. }
Sljedeća Awk naredba pokazuje kako se za izjavu djela, gdje želimo ispisati brojeve 0-10:
$ awk 'BEGIN {for (brojač = 0; brojač <= 10; brojač ++) {ispis brojača}}'
0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Konvencionalna sintaksa datoteke dok izjava je kako slijedi:
while (uvjet) {radnje. }
Uvjet je izraz Awk, a radnje su redovi naredbi Awk koje se izvršavaju kada je uvjet istinit.
Dolje je skripta koja ilustrira upotrebu dok izjava za ispis brojeva 0-10:
#!/bin/bash. awk 'BEGIN {counter = 0; while (brojač <= 10) {ispis brojača; brojač+= 1; } }
Spremite datoteku i učinite skriptu izvršnom, a zatim je pokrenite:
$ chmod +x test.sh. $ ./test.sh.
0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
To je modifikacija dok izjava gore, sa sljedećom temeljnom sintaksom:
učiniti {radnje. } while (stanje)
Mala razlika je u tome što, pod učini dok, naredbe Awk izvršavaju se prije procjene stanja. Koristeći sam primjer ispod dok izjava gore, možemo ilustrirati upotrebu učini dok promjenom naredbe Awk u test.sh skripta kako slijedi:
#!/bin/bash awk 'BEGIN {counter = 0; do {ispis brojača; brojač+= 1; } while (brojač <= 10)} '
Nakon izmjene skripte spremite datoteku i izađite. Zatim učinite skriptu izvršnom i izvedite je na sljedeći način:
$ chmod +x test.sh. $ ./test.sh.
0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ovo nije iscrpan vodič u vezi s izjavama o kontroli protoka Awk, kao što sam ranije spomenuo, postoji nekoliko drugih izjave o kontroli protoka u Awku.
Ipak, ovaj dio Awk serija trebao bi vam dati jasnu temeljnu ideju o tome kako se izvršavanje Awk naredbi može kontrolirati na temelju određenih uvjeta.
Također možete objasniti više o ostalim izjavama o kontroli protoka kako biste stekli bolje razumijevanje o temi. Konačno, u sljedećem odjeljku Awk serije preći ćemo na pisanje Awk skripti.