Ricerca nel sito web

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:

  1. > – maggiore di
  2. < – inferiore a
  3. >= – maggiore o uguale a
  4. <=" – minore o uguale a
  5. == – uguale a
  6. != – diverso da
  7. some_value ~/pattern/ – vero se some_value corrisponde a pattern
  8. some_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:

  1. 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.
  2. 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.