Slik bruker du flytkontrollutsagn i Awk - del 12
Når du gjennomgår alle Awk-eksemplene vi har dekket så langt, helt fra starten av Awk-serien, vil du legge merke til at alle kommandoene i de forskjellige eksemplene utføres sekvensielt, det vil si den ene etter den andre. Men i visse situasjoner vil vi kanskje kjøre noen tekstfiltreringsoperasjoner basert på noen forhold, det er der tilnærmingen til flytkontrollutsagn setter inn.
Det er forskjellige flytkontrollutsagn i Awk-programmering, og disse inkluderer:
- if-else-uttalelse
- for uttalelse
- mens uttalelse
- gjør-mens-uttalelse
- bryte uttalelse
- fortsette uttalelsen
- neste uttalelse
- nextfile-erklæring
- utgangserklæring
For omfanget av denne serien skal vi imidlertid forklare: if-else
, for
, while
og do while
kode> uttalelser. Husk at vi allerede har gått gjennom hvordan du bruker neste setning i del 6 av denne Awk-serien.
1. If-else-erklæringen
Den forventede syntaksen til if-setningen
er lik den for skallet if-setningen:
if (condition1) {
actions1
}
else {
actions2
}
I syntaksen ovenfor er condition1
og condition2
Awk-uttrykk, og actions1
og actions2
er Awk-kommandoer som utføres når respektive betingelser er oppfylt.
Når betingelse1 er oppfylt, noe som betyr at det er sant, blir handlinger1 utført og if-setningen avsluttes, ellers er handlinger2 henrettet.
if-setningen kan også utvides til en if-else_if-else
-setning som nedenfor:
if (condition1){
actions1
}
else if (conditions2){
actions2
}
else{
actions3
}
For skjemaet ovenfor, hvis betingelse1 er sant, blir handlinger1 utført og if-setningen avsluttes, ellers betingelse2 blir evaluert, og hvis det er sant, blir handlinger2 utført og if-setningen avsluttes. Men når betingelse2 er usann, blir handlinger3 utført og if-setningen avsluttes.
Her er et eksempel på bruk av if-setninger, vi har en liste over brukere og deres aldre lagret i filen, brukere .txt.
Vi ønsker å skrive ut en erklæring som angir en brukers navn og om brukerens alder er under eller over 25 år.
aaronkilik@tecMint ~ $ cat users.txt
Sarah L 35 F
Aaron Kili 40 M
John Doo 20 M
Kili Seth 49 M
Vi kan skrive et kort skallmanus for å utføre jobben vår ovenfor, her er innholdet i manuset:
#!/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
Lagre deretter filen og avslutt, gjør skriptet kjørbart og kjør det som følger:
chmod +x test.sh
./test.sh
Eksempelutgang
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. For-erklæringen
I tilfelle du vil utføre noen Awk-kommandoer i en løkke, tilbyr for-setningen deg en passende måte å gjøre det på, med syntaksen nedenfor:
Her er tilnærmingen ganske enkelt definert ved bruk av en teller for å kontrollere løkkekjøringen, først må du initialisere telleren, deretter kjøre den mot en testbetingelse, hvis den er sann, utfør handlingene og til slutt øke telleren. Sløyfen avsluttes når telleren ikke tilfredsstiller betingelsen.
for ( counter-initialization; test-condition; counter-increment ){
actions
}
Følgende Awk-kommando viser hvordan for-setningen fungerer, der vi ønsker å skrive ut tallene 0-10:
awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Eksempelutgang
0
1
2
3
4
5
6
7
8
9
10
3. Mens-erklæringen
Den konvensjonelle syntaksen for while-setningen er som følger:
while ( condition ) {
actions
}
Betingelsen er et Awk-uttrykk og handlinger er linjer med Awk-kommandoer som utføres når betingelsen er sann.
Nedenfor er et skript for å illustrere bruken av while statement for å skrive ut tallene 0-10:
#!/bin/bash
awk ' BEGIN{ counter=0 ;
while(counter<=10){
print counter;
counter+=1 ;
}
}
Lagre filen og gjør skriptet kjørbart, og kjør det deretter:
chmod +x test.sh
./test.sh
Eksempelutgang
0
1
2
3
4
5
6
7
8
9
10
4. Do while Statement
Det er en modifikasjon av while-setningen ovenfor, med følgende underliggende syntaks:
do {
actions
}
while (condition)
Den lille forskjellen er at under gjør mens, blir Awk-kommandoene utført før tilstanden evalueres. Ved å bruke selve eksemplet under while-setningen ovenfor, kan vi illustrere bruken av do while ved å endre Awk-kommandoen i test.sh-skriptet som følger:
#!/bin/bash
awk ' BEGIN{ counter=0 ;
do{
print counter;
counter+=1 ;
}
while (counter<=10)
}
'
Etter å ha modifisert skriptet, lagre filen og avslutt. Gjør deretter skriptet kjørbart og kjør det som følger:
chmod +x test.sh
./test.sh
Eksempelutgang
0
1
2
3
4
5
6
7
8
9
10
Konklusjon
Dette er ikke en omfattende veiledning angående Awk-flytkontrolluttalelser, som jeg hadde nevnt tidligere, er det flere andre flytkontrollutsagn i Awk.
Ikke desto mindre bør denne delen av Awk-serien gi deg en klar grunnleggende idé om hvordan utførelse av Awk-kommandoer kan kontrolleres basert på visse forhold.
Du kan også forklare mer om resten av flytkontrolluttalelsene for å få mer forståelse av emnet. Til slutt, i neste del av Awk-serien, skal vi gå over til å skrive Awk-manus.