Slik bruker du sammenligningsoperatører med Awk i Linux - Del 4


Når du arbeider med numeriske verdier eller strengverdier i en tekstlinje, er filtrering av tekst eller strenger ved hjelp av sammenligningsoperatorer nyttig for brukere av Awk-kommandoer.

I denne delen av Awk-serien skal vi se på hvordan du kan filtrere tekst eller strenger ved å bruke sammenligningsoperatorer. Hvis du er en programmerer, må du allerede være kjent med sammenligningsoperatører, men de som ikke er det, la meg forklare i avsnittet nedenfor.

Hva er sammenligningsoperatører i Awk?

Sammenligningsoperatorer i Awk brukes til å sammenligne verdien av tall eller strenger, og de inkluderer følgende:

  1. > – større enn
  2. < – mindre enn
  3. >= – større enn eller lik
  4. <= – mindre enn eller lik
  5. == – lik
  6. != – ikke lik
  7. some_value ~/pattern/ – sant hvis noen_verdi samsvarer med mønster
  8. some_value !~/pattern/ – sant hvis noen_verdi ikke samsvarer med mønsteret

Nå som vi har sett på de forskjellige sammenligningsoperatørene i Awk, la oss forstå dem bedre ved å bruke et eksempel.

I dette eksemplet har vi en fil som heter food_list.txt som er en handleliste for forskjellige matvarer, og jeg vil gjerne merke matvarer hvis mengde er mindre enn eller lik 20 ved å legge til ( **) på slutten av 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 syntaksen for bruk av sammenligningsoperatorer i Awk er:

expression { actions; }

For å oppnå målet ovenfor, må jeg kjø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 det to viktige ting som skjer:

  1. Det første uttrykket { handling ; } kombinasjon, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } skriver ut linjer med et antall mindre enn eller lik 30 og legger til en (**) på slutten av hver linje. Verdien av kvantitet er tilgjengelig ved å bruke $3 feltvariabel.
  2. Det andre uttrykket { handling ; } kombinasjon, $3 > 30 { print $0 ;} skriver ut linjer uendret siden antallet er større enn 30.

Et eksempel til:

# 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 eksemplet ønsker vi å angi linjer med mengde mindre eller lik 20 med ordet (TRUE) på slutten.

Sammendrag

Dette er en introduksjonsveiledning for sammenligningsoperatører i Awk, derfor må du prøve ut mange andre alternativer og finne ut mer.

I tilfelle problemer du møter eller tillegg du har i tankene, slipp en kommentar i kommentarfeltet nedenfor. Husk å lese neste del av Awk-serien hvor jeg tar deg gjennom sammensatte uttrykk.