Ricerca nel sito web

Come utilizzare le istruzioni di controllo del flusso in Awk - Parte 12


Quando rivedi tutti gli esempi Awk che abbiamo trattato finora, fin dall'inizio della serie Awk, noterai che tutti i comandi nei vari esempi vengono eseguiti in sequenza, cioè uno dopo l'altro. Ma in alcune situazioni, potremmo voler eseguire alcune operazioni di filtraggio del testo in base ad alcune condizioni, è qui che entra in gioco l'approccio delle istruzioni di controllo del flusso.

Ci sono varie istruzioni di controllo del flusso nella programmazione Awk e queste includono:

  1. istruzione if-else
  2. per dichiarazione
  3. mentre dichiarazione
  4. dichiarazione "fai mentre".
  5. interrompere l'istruzione
  6. continuare la dichiarazione
  7. successiva affermazione
  8. dichiarazione del file successivo
  9. dichiarazione di uscita

Tuttavia, per lo scopo di questa serie, parleremo di: if-else, for, when e do while istruzioni. Ricorda che abbiamo già spiegato come utilizzare la prossima istruzione nella parte 6 di questa serie Awk.

1. L'istruzione if-else

La sintassi prevista dell'istruzione if è simile a quella dell'istruzione if della shell:

if  (condition1) {
     actions1
}
else {
      actions2
}

Nella sintassi precedente, condition1 e condition2 sono espressioni Awk, e actions1 e actions2 sono comandi Awk eseguiti quando rispettive condizioni sono soddisfatte.

Quando la condizione1 è soddisfatta, ovvero è vera, viene eseguita actions1 e l'istruzione if termina, altrimenti actions2 è eseguito.

L'istruzione if può anche essere espansa in un'istruzione if-else_if-else come di seguito:

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

Per il modulo sopra, se la condizione1 è vera, allora viene eseguita actions1 e l'istruzione if termina, altrimenti la condizione2 viene valutato e se è vero, viene eseguita actions2 e l'istruzione if termina. Tuttavia, quando la condizione2 è falsa, viene eseguita actions3 e l'istruzione if termina.

Ecco un esempio di utilizzo delle dichiarazioni if, abbiamo un elenco di utenti e le loro età memorizzate nel file, utenti .txt.

Vogliamo stampare una dichiarazione che indichi il nome di un utente e se l'età dell'utente è inferiore o superiore a 25 anni.

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

Possiamo scrivere un breve script di shell per svolgere il nostro lavoro sopra, ecco il contenuto dello script:


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

Quindi salva il file ed esci, rendi eseguibile lo script ed eseguilo come segue:

chmod +x test.sh
./test.sh
Uscita del campione
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. La dichiarazione for

Nel caso in cui desideri eseguire alcuni comandi Awk in un ciclo, l'istruzione for ti offre un modo adatto per farlo, con la sintassi seguente:

Qui, l'approccio è semplicemente definito dall'uso di un contatore per controllare l'esecuzione del ciclo, prima è necessario inizializzare il contatore, quindi eseguirlo rispetto a una condizione di test, se è vera, eseguire le azioni e infine incrementare il contatore. Il ciclo termina quando il contatore non soddisfa la condizione.

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

Il seguente comando Awk mostra come funziona l'istruzione for, dove vogliamo stampare i numeri 0-10:

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

3. L'istruzione while

La sintassi convenzionale dell'istruzione while è la seguente:

while ( condition ) {
          actions
}

La condizione è un'espressione Awk e le azioni sono righe di comandi Awk eseguite quando la condizione è vera.

Di seguito è riportato uno script per illustrare l'uso dell'istruzione while per stampare i numeri 0-10:

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

Salvare il file e rendere eseguibile lo script, quindi eseguirlo:

chmod +x test.sh
./test.sh
Uscita del campione
0
1
2
3
4
5
6
7
8
9
10

4. Dichiarazione "fai mentre".

Si tratta di una modifica dell'istruzione while sopra, con la seguente sintassi sottostante:

do {
     actions
}
 while (condition) 

La leggera differenza è che, sotto do while, i comandi Awk vengono eseguiti prima che la condizione venga valutata. Usando l'esempio dell'istruzione while sopra, possiamo illustrare l'uso di do while alterando il comando Awk nello script test.sh come segue:

#!/bin/bash

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

Dopo aver modificato lo script, salvare il file ed uscire. Quindi rendi eseguibile lo script ed eseguilo come segue:

chmod +x test.sh
./test.sh
Uscita del campione
0
1
2
3
4
5
6
7
8
9
10

Conclusione

Questa non è una guida completa riguardo alle istruzioni di controllo del flusso di Awk, come ho già detto in precedenza, ci sono molte altre dichiarazioni di controllo del flusso in Awk.

Tuttavia, questa parte della serie Awk dovrebbe darti un'idea chiara e fondamentale di come l'esecuzione dei comandi Awk può essere controllata in base a determinate condizioni.

Puoi anche spiegare di più sul resto delle dichiarazioni di controllo del flusso per ottenere una maggiore comprensione dell'argomento. Infine, nella prossima sezione della serie Awk, passeremo alla scrittura degli script Awk.