Flow Control -lauseiden käyttäminen Awkissa - Osa 12


Kun tarkastelet kaikkia tähän mennessä käsittelemiämme Awk-esimerkkejä, heti Awk-sarjan alusta alkaen, huomaat, että kaikki komennot eri esimerkeissä suoritetaan peräkkäin, eli peräkkäin. Mutta tietyissä tilanteissa saatamme haluta suorittaa joitain tekstin suodatustoimintoja joidenkin olosuhteiden perusteella, jolloin kulunohjauskäskyjen lähestymistapa astuu voimaan.

Awk-ohjelmoinnissa on useita vuonohjauskäskyjä, jotka sisältävät:

  1. jos-muuten lausunto
  2. lausuntoa varten
  3. kun lausunto
  4. do-when lausunto
  5. katkeaa lausunto
  6. jatka lausuntoa
  7. seuraava lausunto
  8. nextfile -lausunto
  9. poistumisilmoitus

Tämän sarjan laajuuden osalta selitämme kuitenkin: if-else, for, while ja do while lausekkeita. Muista, että olemme jo käyneet läpi seuraavan lauseen käytön tämän Awk-sarjan osassa 6.

1. If-else-lauseke

if-lauseen odotettu syntaksi on samanlainen kuin komentotulkin if-lauseen:

if  (condition1) {
     actions1
}
else {
      actions2
}

Yllä olevassa syntaksissa ehto1 ja ehto2 ovat Awk-lausekkeita ja actions1 ja actions2 ovat Awk-komentoja, jotka suoritetaan, kun vastaavat ehdot täyttyvät.

Kun ehto1 täyttyy, eli se on totta, actions1 suoritetaan ja if-lause poistuu, muuten actions2 on teloitettu.

if-lauseke voidaan myös laajentaa if-else_if-else-lauseeksi seuraavasti:

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

Jos yllä olevassa lomakkeessa ehto1 on tosi, actions1 suoritetaan ja if-lause poistuu, muuten ehto2 on arvioitu ja jos se on tosi, actions2 suoritetaan ja if-lause poistuu. Jos ehto2 on kuitenkin epätosi, actions3 suoritetaan ja if-lause poistuu.

Tässä on esimerkki if-lauseiden käytöstä. Meillä on tiedostoon tallennettu luettelo käyttäjistä ja heidän ikänsä, käyttäjistä. .txt.

Haluamme tulostaa lausunnon, josta käy ilmi käyttäjän nimi ja onko käyttäjän ikä alle vai yli 25-vuotias.

aaronkilik@tecMint ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

Voimme kirjoittaa lyhyen shell-skriptin suorittaaksemme yllä olevaa työtämme, tässä on skriptin sisältö:


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

Tallenna sitten tiedosto ja poistu, tee komentosarjasta suoritettava ja suorita se seuraavasti:

chmod +x test.sh
./test.sh
Näytelähtö
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 Statement

Jos haluat suorittaa joitain Awk-komentoja silmukassa, for-lause tarjoaa sinulle sopivan tavan tehdä se alla olevalla syntaksilla:

Tässä lähestymistapa määritellään yksinkertaisesti käyttämällä laskuria silmukan suorittamisen ohjaamiseen. Ensin sinun on alustettava laskuri, sitten suoritettava se testiehtoa vastaan, jos se on totta, suorita toiminnot ja lopuksi lisää laskuria. Silmukka päättyy, kun laskuri ei täytä ehtoa.

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

Seuraava Awk-komento näyttää, kuinka for-lause toimii, johon haluamme tulostaa numerot 0-10:

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

3. While-lauseke

while-lauseen tavanomainen syntaksi on seuraava:

while ( condition ) {
          actions
}

Ehto on Awk-lauseke ja toiminnot ovat Awk-komentojen rivejä, jotka suoritetaan, kun ehto on tosi.

Alla on skripti, joka havainnollistaa while-lausekkeen käyttöä numeroiden 0-10 tulostamiseen:

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

Tallenna tiedosto ja tee komentosarjasta suoritettava ja suorita se:

chmod +x test.sh
./test.sh
Näytelähtö
0
1
2
3
4
5
6
7
8
9
10

4. Do while -lausunto

Se on muunnelma yllä olevasta while-lauseesta, jonka taustalla on seuraava syntaksi:

do {
     actions
}
 while (condition) 

Pieni ero on, että kohdassa do while Awk-komennot suoritetaan ennen ehdon arviointia. Yllä olevan while-lauseen esimerkin avulla voimme havainnollistaa do while -käskyn käyttöä muuttamalla Awk-komentoa test.sh-komentosarjassa. seuraa:

#!/bin/bash

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

Kun olet muokannut komentosarjaa, tallenna tiedosto ja poistu. Tee sitten komentosarjasta suoritettava ja suorita se seuraavasti:

chmod +x test.sh
./test.sh
Näytelähtö
0
1
2
3
4
5
6
7
8
9
10

Johtopäätös

Tämä ei ole kattava opas koskien Awk-vuonohjauskäskyjä, sillä kuten aiemmin mainitsin, Awkissa on useita muita vuonohjauskäskyjä.

Tästä huolimatta tämän Awk-sarjan osan pitäisi antaa sinulle selkeä perustavanlaatuinen käsitys siitä, kuinka Awk-komentojen suorittamista voidaan ohjata tietyissä olosuhteissa.

Voit myös selittää enemmän muista vuonohjauslausekkeista saadaksesi enemmän ymmärrystä aiheesta. Lopuksi Awk-sarjan seuraavassa osassa siirrymme Awk-skriptien kirjoittamiseen.