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:
>
– groter dan<
– kleiner dan>=
– groter dan of gelijk aan<=
– kleiner dan of gelijk aan==
– gelijk aan!=
– niet gelijk aaneen_waarde ~/patroon/
– waar als een_waarde overeenkomt met het patrooneen_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:
- 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.
- 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.