Zoeken op website

Vergelijkingsoperatoren gebruiken met Awk in Linux - Deel 4


Bij het omgaan met numerieke waarden of tekenreekswaarden in een regel tekst, is het filteren van tekst of tekenreeksen met behulp van vergelijkingsoperatoren handig voor gebruikers van Awk-opdrachten.

In dit deel van de Awk-serie zullen we bekijken hoe u tekst of tekenreeksen kunt filteren met behulp van vergelijkingsoperatoren. Als u een programmeur bent, bent u waarschijnlijk al bekend met vergelijkingsoperatoren, maar degenen die dat nog niet zijn, laat ik het hieronder uitleggen.

Wat zijn vergelijkingsoperatoren in Awk?

Vergelijkingsoperatoren in Awk worden gebruikt om de waarde van getallen of tekenreeksen te vergelijken en omvatten het volgende:

  1. > – groter dan
  2. < – kleiner dan
  3. >= – groter dan of gelijk aan
  4. <= – kleiner dan of gelijk aan
  5. == – gelijk aan
  6. != – niet gelijk aan
  7. een_waarde ~/patroon/ – waar als een_waarde overeenkomt met het patroon
  8. een_waarde !~/patroon/ – waar als een_waarde niet overeenkomt met het patroon

Nu we de verschillende vergelijkingsoperatoren in Awk hebben bekeken, kunnen we ze beter begrijpen aan de hand van een voorbeeld.

In dit voorbeeld hebben we een bestand met de naam food_list.txt dat een boodschappenlijst is voor verschillende voedingsmiddelen en ik wil voedingsmiddelen waarvan de hoeveelheid kleiner is dan of gelijk is aan 20 markeren door ( **) aan het einde van elke regel.

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

De algemene syntaxis voor het gebruik van vergelijkingsoperatoren in Awk is:

expression { actions; }

Om het bovenstaande doel te bereiken, zal ik de onderstaande opdracht moeten uitvoeren:

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

In het bovenstaande voorbeeld gebeuren er twee belangrijke dingen:

  1. De eerste expressie { action ; } combinatie, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } drukt regels af met een aantal kleiner dan of gelijk aan 30 en voegt een (**) toe aan het einde van elke regel. De waarde van de hoeveelheid is toegankelijk via de veldvariabele $3.
  2. De tweede expressie { action ; } combinatie, $3 > 30 { print $0 ;} drukt de regels ongewijzigd af omdat hun aantal groter is dan 30.

Nog een voorbeeld:

# 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 dit voorbeeld willen we regels met een hoeveelheid kleiner dan of gelijk aan 20 aangeven met het woord (TRUE) aan het einde.

Samenvatting

Dit is een inleidende tutorial over vergelijkingsoperatoren in Awk. Daarom moet je veel andere opties uitproberen en meer ontdekken.

Als u problemen tegenkomt of aanvullingen heeft die u in gedachten heeft, kunt u een reactie achterlaten in het commentaargedeelte hieronder. Vergeet niet om het volgende deel van de Awk-serie te lezen, waarin ik u door samengestelde uitdrukkingen zal leiden.