Sådan bruges sammenligningsoperatører med Awk i Linux - Del 4


Når man beskæftiger sig med numeriske værdier eller strengværdier i en tekstlinje, er det nyttigt for filtrering af tekst eller strenge ved hjælp af sammenligningsoperatorer for Awk-kommandobrugere.

I denne del af Awk-serien skal vi se på, hvordan du kan filtrere tekst eller strenge ved hjælp af sammenligningsoperatorer. Hvis du er programmør, skal du allerede være fortrolig med sammenligningsoperatører, men dem der ikke er det, lad mig forklare i afsnittet nedenfor.

Sammenligningsoperatører i Awk bruges til at sammenligne værdien af tal eller strenge, og de inkluderer følgende:

  1. > - større end
  2. < - mindre end
  3. > = - større end eller lig med
  4. <= - mindre end eller lig med
  5. == - lig med
  6. ! = - ikke lig med
  7. noget_værdi ~/mønster/ - sandt hvis noget_værdi matcher mønster
  8. noget_værdi! ~/mønster/ - sandt, hvis noget_værdi ikke matcher mønster

Nu hvor vi har kigget på de forskellige sammenligningsoperatører i Awk, lad os forstå dem bedre ved hjælp af et eksempel.

I dette eksempel har vi en fil med navnet food_list.txt, som er en indkøbsliste for forskellige fødevarer, og jeg vil gerne markere fødevarer, hvis mængde er mindre end eller lig med 20 ved at tilføje (**) i slutningen af hver linje.

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

Den generelle syntaks til brug af sammenligningsoperatorer i Awk er:

# expression { actions; }

For at nå ovenstående mål bliver jeg nødt til at køre kommandoen nedenfor:

# 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	**

I eksemplet ovenfor er der to vigtige ting, der sker:

  1. Det første udtryk {handling; } kombination, $ 3 <= 30 {printf “% s% s ”, $ 0,” ** ”; } udskriver linjer med en mængde på mindre end eller lig med 30 og tilføjer en (**) i slutningen af hver linje. Værdien af mængden tilgås ved hjælp af feltvariablen $ 3.
  2. Det andet udtryk {handling; } kombination, $ 3> 30 {print $ 0;} udskriver linjer uændrede, da deres mængde er større end 30.

Endnu et eksempel:

# 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

I dette eksempel ønsker vi at angive linjer med mængde mindre eller lig med 20 med ordet (SAND) i slutningen.

Resumé

Dette er en introduktionsvejledning til sammenligningsoperatører i Awk, derfor skal du prøve mange andre muligheder og opdage mere.

I tilfælde af eventuelle problemer, du står over for, eller tilføjelser, du har i tankerne, skal du slippe en kommentar i kommentarfeltet nedenfor. Husk at læse den næste del af Awk-serien, hvor jeg tager dig gennem sammensatte udtryk.