Vyhledávání na webu

Jak používat příkazy řízení toku v Awk – část 12


Když si prohlédnete všechny příklady Awk, které jsme doposud probrali, hned od začátku série Awk, všimnete si, že všechny příkazy v různých příkladech jsou prováděny postupně, tedy jeden po druhém. Ale v určitých situacích můžeme chtít spustit některé operace filtrování textu na základě určitých podmínek, to je místo, kde nastává přístup příkazů řízení toku.

V programování Awk existují různé příkazy řízení toku a mezi ně patří:

  1. if- else prohlášení
  2. pro vyjádření
  3. zatímco prohlášení
  4. do-while prohlášení
  5. příkaz přerušení
  6. pokračování prohlášení
  7. další výpis
  8. příkaz nextfile
  9. výstupní prohlášení

Pro rozsah této série však vysvětlíme: if-else, for, while a do while kód> příkazy. Pamatujte, že jsme si již prošli, jak použít další příkaz v části 6 této série Awk.

1. Prohlášení if-else

Očekávaná syntaxe příkazu if je podobná syntaxi příkazu if shellu:

if  (condition1) {
     actions1
}
else {
      actions2
}

Ve výše uvedené syntaxi jsou condition1 a condition2 výrazy Awk a actions1 a actions2 jsou příkazy Awk provedené, když jsou splněny příslušné podmínky.

Když je splněna podmínka1, což znamená, že je pravdivá, provede se akce1 a příkaz if se ukončí, jinak je akce2 popraven.

Příkaz if lze také rozšířit na příkaz if-else_if-else, jak je uvedeno níže:

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

Pokud je ve výše uvedeném formuláři podmínka1 pravdivá, provede se akce1 a příkaz if se ukončí, jinak podmínka2 se vyhodnotí, a pokud je to pravda, provede se actions2 a příkaz if se ukončí. Pokud je však condition2 nepravdivá, provede se akce3 a příkaz if se ukončí.

Zde je příklad použití příkazů if, v souboru máme uložený seznam uživatelů a jejich věku, uživatelů .txt.

Chceme vytisknout prohlášení s uvedením jména uživatele a toho, zda je věk uživatele nižší nebo více než 25 let.

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

Můžeme napsat krátký shell skript pro provedení naší práce výše, zde je obsah skriptu:


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

Poté soubor uložte a ukončete, vytvořte spustitelný skript a spusťte jej následovně:

chmod +x test.sh
./test.sh
Ukázkový výstup
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. Výpis pro

V případě, že chcete provádět některé příkazy Awk ve smyčce, pak vám příkaz for nabízí vhodný způsob, jak to provést, s níže uvedenou syntaxí:

Zde je přístup jednoduše definován použitím čítače pro řízení provádění smyčky, nejprve musíte čítač inicializovat, poté jej spustit proti testovací podmínce, pokud je pravdivá, provést akce a nakonec čítač zvýšit. Cyklus se ukončí, když čítač nesplňuje podmínku.

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

Následující příkaz Awk ukazuje, jak funguje příkaz for, kde chceme vytisknout čísla 0-10:

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Ukázkový výstup
0
1
2
3
4
5
6
7
8
9
10

3. Prohlášení while

Konvenční syntaxe příkazu while je následující:

while ( condition ) {
          actions
}

Podmínka je výraz Awk a akce jsou řádky příkazů Awk provedené, když je podmínka pravdivá.

Níže je uveden skript ilustrující použití příkazu while k tisku čísel 0-10:

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

Uložte soubor a vytvořte spustitelný skript, poté jej spusťte:

chmod +x test.sh
./test.sh
Ukázkový výstup
0
1
2
3
4
5
6
7
8
9
10

4. Prohlášení do while

Jedná se o modifikaci výše uvedeného příkazu while s následující základní syntaxí:

do {
     actions
}
 while (condition) 

Drobný rozdíl je v tom, že pod do while se příkazy Awk provedou před vyhodnocením podmínky. Na samotném příkladu pod příkaz while výše můžeme ilustrovat použití do while změnou příkazu Awk ve skriptu test.sh jako následuje:

#!/bin/bash

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

Po úpravě skriptu uložte soubor a ukončete. Poté vytvořte spustitelný skript a spusťte jej následovně:

chmod +x test.sh
./test.sh
Ukázkový výstup
0
1
2
3
4
5
6
7
8
9
10

Závěr

Toto není vyčerpávající příručka týkající se příkazů řízení toku Awk, jak jsem již zmínil dříve, v Awk existuje několik dalších příkazů řízení toku.

Nicméně tento díl série Awk by vám měl dát jasnou základní představu o tom, jak lze za určitých podmínek ovládat provádění příkazů Awk.

Můžete také vysvětlit více o zbývajících prohlášeních o řízení toku, abyste získali více porozumění předmětu. Nakonec v další části série Awk přejdeme k psaní skriptů Awk.