Come utilizzare gli operatori di confronto con Awk in Linux - Parte 4
Quando si ha a che fare con valori numerici o stringhe in una riga di testo, filtrare testo o stringhe utilizzando gli operatori di confronto risulta utile per gli utenti del comando Awk.
In questa parte della serie Awk, daremo un'occhiata a come filtrare testo o stringhe utilizzando gli operatori di confronto. Se sei un programmatore allora devi già avere familiarità con gli operatori di confronto ma quelli che non lo sono, lasciami spiegare nella sezione seguente.
Cosa sono gli operatori di confronto in Awk?
Gli operatori di confronto in Awk vengono utilizzati per confrontare il valore di numeri o stringhe e includono quanto segue:
> – maggiore di<
– inferiore a>=
– maggiore o uguale a<="
– minore o uguale a==
– uguale a!=
– diverso dasome_value ~/pattern/
– vero se some_value corrisponde a patternsome_value !~/pattern/
– vero se some_value non corrisponde al pattern
Ora che abbiamo visto i vari operatori di confronto in Awk, cerchiamo di capirli meglio utilizzando un esempio.
In questo esempio, abbiamo un file denominato food_list.txt che è una lista della spesa per diversi prodotti alimentari e vorrei contrassegnare i prodotti alimentari la cui quantità è inferiore o uguale a 20 aggiungendo ( **)
alla fine di ogni riga.
No Item_Name Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45
3 Pineapples 5 $4.45
4 Tomatoes 25 $3.45
5 Onions 15 $1.45
6 Bananas 30 $3.45
La sintassi generale per utilizzare gli operatori di confronto in Awk è:
expression { actions; }
Per raggiungere l'obiettivo di cui sopra, dovrò eseguire il comando seguente:
# awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt
No Item_Name` Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45 **
3 Pineapples 5 $4.45 **
4 Tomatoes 25 $3.45 **
5 Onions 15 $1.45 **
6 Bananas 30 $3.45 **
Nell’esempio sopra, ci sono due cose importanti che accadono:
- La prima espressione { azione ; } combinazione, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } stampa le righe con quantità inferiore o uguale a 30 e aggiunge un (**) alla fine di ogni riga. È possibile accedere al valore della quantità utilizzando la variabile di campo $3.
- La seconda espressione { azione ; combinazione, $3 > 30 { print $0 ;} stampa le righe invariate poiché la loro quantità è maggiore di 30.
Un altro esempio:
# awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20 { print $0 ;} ' food_list.txt
No Item_Name Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45
3 Pineapples 5 $4.45 TRUE
4 Tomatoes 25 $3.45
5 Onions 15 $1.45 TRUE
6 Bananas 30 $3.45
In questo esempio vogliamo indicare le righe con quantità minore o uguale a 20 con la parola (TRUE) alla fine.
Riepilogo
Questo è un tutorial introduttivo agli operatori di confronto in Awk, quindi devi provare molte altre opzioni e scoprire di più.
In caso di problemi che incontri o di eventuali aggiunte che hai in mente, lascia un commento nella sezione commenti qui sotto. Ricordati di leggere la parte successiva della serie Awk in cui ti guiderò attraverso le espressioni composte.