Weboldal keresés

Az áramlásszabályozási utasítások használata az Awk-ban – 12. rész


Ha áttekinti az összes eddig tárgyalt Awk-példát, rögtön az Awk-sorozat elejétől fogva, észre fogja venni, hogy a különféle példákban szereplő összes parancs szekvenciálisan, egymás után kerül végrehajtásra. De bizonyos helyzetekben előfordulhat, hogy bizonyos feltételek alapján néhány szövegszűrési műveletet le kell futtatnunk, ahol az áramlásvezérlő utasítások megközelítése érvényesül.

Az Awk programozásban különféle áramlásvezérlő utasítások léteznek, és ezek a következők:

  1. ha-más kijelentés
  2. nyilatkozathoz
  3. míg nyilatkozat
  4. do-while kijelentés
  5. szünet nyilatkozat
  6. nyilatkozat folytatása
  7. következő kijelentés
  8. nextfile nyilatkozat
  9. kilépési nyilatkozat

Ennek a sorozatnak a hatóköréhez azonban kifejtjük a következőket: if-else, for, while és do while kód> utasításokat. Ne feledje, hogy az Awk sorozat 6. részében már végigjártuk, hogyan kell használni a következő utasítást.

1. Az if-else nyilatkozat

Az if utasítás várt szintaxisa hasonló az if utasítás shelléhez:

if  (condition1) {
     actions1
}
else {
      actions2
}

A fenti szintaxisban a condition1 és a condition2 Awk kifejezések, az actions1 és actions2 pedig Awk parancsok, amelyek akkor futnak le, amikor megfelelő feltételek teljesülnek.

Ha a feltétel1 teljesül, vagyis igaz, akkor az actions1 végrehajtásra kerül, és az if utasítás kilép, ellenkező esetben az actions2 végrehajtott.

Az if utasítás az alábbiak szerint is kibővíthető if-else_if-else utasításra:

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

A fenti űrlap esetében, ha a feltétel1 igaz, akkor az actions1 végrehajtásra kerül, és az if utasítás kilép, ellenkező esetben a feltétel2 kiértékelődik, és ha igaz, akkor az actions2 végrehajtásra kerül, és az if utasítás kilép. Ha azonban a feltétel2 hamis, akkor az actions3 végrehajtásra kerül, és az if utasítás kilép.

Itt van egy példa az if utasítások használatára, a fájlban tárolt felhasználók és életkoruk listája, felhasználók .txt.

Szeretnénk nyomtatni egy nyilatkozatot, amely tartalmazza a felhasználó nevét, és azt, hogy a felhasználó életkora 25 évnél fiatalabb vagy idősebb.

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

A fenti munkánk elvégzéséhez írhatunk egy rövid shell szkriptet, itt van a script tartalma:


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

Ezután mentse el a fájlt, és lépjen ki, tegye végrehajthatóvá a szkriptet, és futtassa az alábbiak szerint:

chmod +x test.sh
./test.sh
Minta kimenet
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. A for nyilatkozat

Ha néhány Awk parancsot ciklusban szeretne végrehajtani, akkor a for utasítás megfelelő módot kínál erre az alábbi szintaxissal:

Itt a megközelítést egyszerűen úgy határozzuk meg, hogy egy számlálót használunk a hurokvégrehajtás vezérlésére, először inicializálni kell a számlálót, majd le kell futtatni egy tesztfeltétellel szemben, ha igaz, hajtsa végre a műveleteket, és végül növelje a számlálót. A hurok akkor ér véget, ha a számláló nem felel meg a feltételnek.

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

A következő Awk parancs megmutatja, hogyan működik a for utasítás, ahol a 0-10 számokat szeretnénk kinyomtatni:

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Minta kimenet
0
1
2
3
4
5
6
7
8
9
10

3. A while nyilatkozat

A while utasítás hagyományos szintaxisa a következő:

while ( condition ) {
          actions
}

A feltétel egy Awk kifejezés, a műveletek pedig az Awk parancsok sorai, amelyeket akkor hajtanak végre, ha a feltétel igaz.

Az alábbiakban egy szkript illusztrálja a while utasítás használatát a 0-10 számok kinyomtatására:

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

Mentse el a fájlt, tegye futtathatóvá a szkriptet, majd futtassa:

chmod +x test.sh
./test.sh
Minta kimenet
0
1
2
3
4
5
6
7
8
9
10

4. A do while nyilatkozat

Ez a fenti while utasítás módosítása, a következő szintaxissal:

do {
     actions
}
 while (condition) 

A kis különbség az, hogy a do while alatt az Awk parancsok a feltétel kiértékelése előtt végrehajtásra kerülnek. A fenti while utasítás alatti példával szemléltethetjük a do while használatát úgy, hogy megváltoztatjuk az Awk parancsot a test.sh szkriptben a következőképpen: következik:

#!/bin/bash

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

A szkript módosítása után mentse el a fájlt, és lépjen ki. Ezután tegye végrehajthatóvá a szkriptet, és hajtsa végre a következőképpen:

chmod +x test.sh
./test.sh
Minta kimenet
0
1
2
3
4
5
6
7
8
9
10

Következtetés

Ez nem egy átfogó útmutató az Awk-folyamatvezérlő utasításokkal kapcsolatban, amint azt korábban említettem, számos más folyamatvezérlő utasítás található az Awk-ban.

Mindazonáltal az Awk sorozat ezen részének világos alapvető elképzelést kell adnia arról, hogy az Awk parancsok végrehajtása bizonyos feltételek mellett hogyan vezérelhető.

A többi áramlásszabályozási utasítást is kifejtheti, hogy jobban megértse a témát. Végül az Awk sorozat következő részében áttérünk az Awk-szkriptek írására.