Questo articolo fa parte della serie Awk Tutorial Examples in corso. Nei nostri precedenti articoli su awk, abbiamo discusso di awk print, variabili definite dall'utente awk, variabili integrate awk e operatori awk.
In questo tutorial awk, esaminiamo le dichiarazioni awk conditional if con esempi pratici.
Awk supporta molte istruzioni condizionali per controllare il flusso del programma. La maggior parte della sintassi dell'istruzione condizionale Awk è simile al linguaggio di programmazione "C".
Normalmente l'istruzione condizionale controlla la condizione, prima di eseguire qualsiasi azione. Se la condizione è vera, le azioni vengono eseguite. Allo stesso modo è possibile eseguire un'azione se la condizione è falsa.
L'istruzione condizionale inizia con la parola chiave chiamata "se". Awk supporta due diversi tipi di istruzione if.
- Dichiarazione Awk Simple If
- Dichiarazione Awk If-Else
- Awk If-ElseIf-Ladder
Dichiarazione Awk Simple If
Azione singola: L'istruzione Simple If viene utilizzata per verificare le condizioni, se la condizione restituisce true, esegue le azioni corrispondenti.
Syntax: if (conditional-expression) action
- se è una parola chiave
- espressione-condizionale – espressione per controllare le condizioni
- azione:qualsiasi istruzione awk per eseguire un'azione.
Azione multipla: Se l'espressione condizionale restituisce true, verrà eseguita l'azione. Se è necessario eseguire più di un'azione, le azioni devono essere racchiuse tra parentesi graffe, separandole in una nuova riga o punto e virgola come mostrato di seguito.
Syntax: if (conditional-expression) { action1; action2; }
Se la condizione è vera, tutte le azioni racchiuse tra parentesi graffe verranno eseguite nell'ordine indicato. Dopo che tutte le azioni sono state eseguite, continua a eseguire le istruzioni successive.
Awk If Else Statement
Nella semplice istruzione awk If sopra, non esiste un insieme di azioni nel caso in cui la condizione sia falsa. Nell'istruzione awk If Else puoi fornire l'elenco delle azioni da eseguire se la condizione è falsa. Se la condizione restituisce true verrà eseguita l'azione 1, se la condizione è falsa verrà eseguita l'azione 2.
Syntax: if (conditional-expression) action1 else action2
Awk ha anche un operatore condizionale, ovvero operatore ternario ( ?:) la cui caratteristica è simile a awk If Else Statement. Se l'espressione condizionale è vera, verrà eseguita l'azione1 e se l'espressione condizionale è falsa verrà eseguita l'azione2.
Syntax: conditional-expression ? action1 : action2 ;
Awk If Else If ladder
if(conditional-expression1) action1; else if(conditional-expression2) action2; else if(conditional-expression3) action3; . . else action n;
- Se l'espressione-condizionale1 è vera, verrà eseguita l'azione1.
- Se l'espressione-condizionale1 è falsa, verrà verificata l'espressione-condizionale2, se è vera, verrà eseguita l'azione2 e procederà in questo modo. L'ultima parte verrà eseguita se nessuna delle espressioni condizionali è vera.
Ora creiamo il file di input di esempio che contiene i voti dello studente.
$cat student-marks Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 Edwin 2537 87 97 95 Dayan 2415 30 47
1. Awk If Esempio:verifica che tutti i segni esistano
$ awk '{ if ($3 =="" || $4 == "" || $5 == "") print "Some score for the student",$1,"is missing";' }' student-marks Some score for the student RinRao is missing Some score for the student Dayan is missing
$ 3, $ 4 e $ 5 sono i punteggi dei test dello studente. Se il punteggio del test è uguale a vuoto, genera il messaggio. || l'operatore deve verificare che uno qualsiasi dei segni non esista, dovrebbe avvisare.
2. Awk If Else Esempio:genera un rapporto Pass/Fail basato sui voti degli studenti in ciascuna materia
$ awk '{ if ($3 >=35 && $4 >= 35 && $5 >= 35) print $0,"=>","Pass"; else print $0,"=>","Fail"; }' student-marks Jones 2143 78 84 77 => Pass Gondrol 2321 56 58 45 => Pass RinRao 2122 38 37 => Fail Edwin 2537 87 97 95 => Pass Dayan 2415 30 47 => Fail
La condizione per Pass è che tutti i punteggi del test devono essere maggiori o uguali a 35. Quindi tutti i punteggi dei test vengono controllati se maggiori di 35, quindi stampa l'intera riga e la stringa "Pass", altrimenti anche se uno qualsiasi dei il punteggio del test non soddisfa la condizione, stampa l'intera riga e stampa la stringa “Fail”.
3. Awk If Else If Esempio:trova la media e il voto per ogni studente
$ cat grade.awk { total=$3+$4+$5; avg=total/3; if ( avg >= 90 ) grade="A"; else if ( avg >= 80) grade ="B"; else if (avg >= 70) grade ="C"; else grade="D"; print $0,"=>",grade; } $ awk -f grade.awk student-marks Jones 2143 78 84 77 => C Gondrol 2321 56 58 45 => D RinRao 2122 38 37 => D Edwin 2537 87 97 95 => A Dayan 2415 30 47 => D
Nello script awk sopra, la variabile chiamata 'avg' ha la media dei tre punteggi dei test. Se la media è maggiore o uguale a 90, il voto è A, oppure se la media è maggiore o uguale a 80 il voto è B, se la media è maggiore o uguale a 70, il voto è C. Oppure altrimenti il voto è D.
4. Awk Ternary ( ?:) Esempio:concatena ogni 3 righe di input con una virgola.
$ awk 'ORS=NR%3?",":"\n"' student-marks Jones 2143 78 84 77,Gondrol 2321 56 58 45,RinRao 2122 38 37 Edwin 2537 87 97 95,Dayan 2415 30 47,
Abbiamo discusso in precedenza della variabile incorporata awk ORS. Questa variabile viene aggiunta dopo ogni riga che ottiene l'output. In questo esempio, viene modificato ogni terza riga da una virgola a una nuova riga. Per le righe 1, 2 è una virgola, per la riga 3 è una nuova riga, per le righe 4, 5 è una virgola, per la riga 6 è una nuova riga, ecc.
Lettura consigliata