Cum să utilizați instrucțiunile de control al fluxului în Awk - Partea 12


Când treceți în revistă toate exemplele Awk pe care le-am acoperit până acum, chiar de la începutul operațiunilor de filtrare a textului pe baza unor condiții, acolo se instalează abordarea instrucțiunilor de control al fluxului.

Există diverse instrucțiuni de control al fluxului în programarea Awk și acestea includ:

  1. instrucțiunea if-else
  2. pentru declarație
  3. în timp ce declarația
  4. instrucțiunea do-while
  5. break statement
  6. continuare declarație
  7. următoarea declarație
  8. instrucțiunea fișier următor
  9. exit statement

Cu toate acestea, pentru domeniul acestei serii, vom expune: if-else, for, while și do while cod> instrucțiuni. Amintiți-vă că am trecut deja prin seria Awk.

1. Declarația if-else

Sintaxa așteptată a instrucțiunii if este similară cu cea a instrucțiunii if shell:

if  (condition1) {
     actions1
}
else {
      actions2
}

În sintaxa de mai sus, condition1 și condition2 sunt expresii Awk, iar actions1 și actions2 sunt comenzi Awk executate atunci când sunt îndeplinite condițiile respective.

Când condiția1 este îndeplinită, adică este adevărată, atunci actions1 este executată și instrucțiunea if iese, în caz contrar actions2 este executat.

Instrucțiunea if poate fi extinsă și la o instrucțiune if-else_if-else, după cum urmează:

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

Pentru forma de mai sus, dacă condiția1 este adevărată, atunci actions1 este executată și instrucțiunea if iese, în caz contrar condiția2 este evaluat și dacă este adevărat, atunci actions2 este executat și instrucțiunea if iese. Cu toate acestea, când condiția2 este falsă, atunci actions3 este executată și instrucțiunea if iese.

Iată un exemplu de utilizare a instrucțiunilor if, avem o listă de utilizatori și vârstele stocate în fișier, utilizatori .txt.

Dorim să tipărim o declarație care indică numele unui utilizator și dacă vârsta utilizatorului este mai mică sau mai mare de 25 ani.

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

Putem scrie un scurt script shell pentru a ne îndeplini treaba de mai sus, iată conținutul scriptului:

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

Apoi salvați fișierul și ieșiți, faceți scriptul executabil și rulați-l după cum urmează:

$ chmod +x test.sh
$ ./test.sh
Ieșire eșantion
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. Declarația for

În cazul în care doriți să executați unele comenzi Awk într-o buclă, atunci instrucțiunea for vă oferă o modalitate adecvată de a face acest lucru, cu sintaxa de mai jos:

Aici, abordarea este pur și simplu definită prin utilizarea unui contor pentru a controla execuția buclei, mai întâi trebuie să inițializați contorul, apoi să îl executați pe o condiție de testare, dacă este adevărată, executați acțiunile și, în final, creșteți contorul. Bucla se termină atunci când contorul nu satisface condiția.

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

Următoarea comandă Awk arată cum funcționează instrucțiunea for, în care dorim să tipărim numerele 0-10:

$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Ieșire eșantion
0
1
2
3
4
5
6
7
8
9
10

3. Declarația while

Sintaxa convențională a instrucțiunii while este următoarea:

while ( condition ) {
          actions
}

Condiția este o expresie Awk, iar acțiunile sunt linii de comenzi Awk executate atunci când condiția este adevărată.

Mai jos este un script pentru a ilustra utilizarea instrucțiunii while pentru a tipări numerele 0-10:

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

Salvați fișierul și faceți scriptul executabil, apoi rulați-l:

$ chmod +x test.sh
$ ./test.sh
Ieșire eșantion
0
1
2
3
4
5
6
7
8
9
10

4. Declarația do while

Este o modificare a instrucțiunii while de mai sus, cu următoarea sintaxă:

do {
     actions
}
 while (condition) 

Ușoară diferență este că, sub do while, comenzile Awk sunt executate înainte ca condiția să fie evaluată. Folosind chiar exemplul de sub instrucțiunea while de mai sus, putem ilustra utilizarea do while prin modificarea comenzii Awk din scriptul test.sh ca urmează:

#!/bin/bash

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

După modificarea scriptului, salvați fișierul și ieșiți. Apoi faceți scriptul executabil și executați-l după cum urmează:

$ chmod +x test.sh
$ ./test.sh
Ieșire eșantion
0
1
2
3
4
5
6
7
8
9
10

Concluzie

Acesta nu este un ghid cuprinzător privind instrucțiunile de control al fluxului Awk, așa cum am menționat mai devreme, există câteva alte instrucțiuni de control al fluxului în Awk.

Cu toate acestea, această parte a seriei Awk ar trebui să vă ofere o idee fundamentală clară despre modul în care execuția comenzilor Awk poate fi controlată în funcție de anumite condiții.

Puteți, de asemenea, să expuneți mai multe despre restul declarațiilor de control al fluxului pentru a obține mai multe înțelegeri asupra subiectului. În cele din urmă, în următoarea secțiune a seriei Awk, vom trece la scrierea scripturilor Awk.