Kako koristiti operatore poređenja sa Awk u Linuxu - 4. dio
Kada se radi o numeričkim ili nizovima vrijednosti u retku teksta, filtriranje teksta ili nizova pomoću operatora poređenja je zgodno za korisnike naredbi Awk.
U ovom dijelu Awk serije, pogledat ćemo kako možete filtrirati tekst ili nizove koristeći operatore poređenja. Ako ste programer, onda morate već biti upoznati sa operatorima poređenja, ali oni koji nisu, dopustite mi da objasnim u odeljku ispod.
Šta su operatori poređenja u Awk-u?
Operatori poređenja u Awk-u se koriste za poređenje vrijednosti brojeva ili nizova i uključuju sljedeće:
>
– veći od<
– manje od>=
– veće ili jednako<=
– manje ili jednako==
– jednako!=
– nije jednakosome_value ~/pattern/
– istina ako se neka_vrijednost poklapa sa uzorkomsome_value !~/pattern/
– istina ako neka_vrijednost ne odgovara uzorku
Sada kada smo pogledali različite operatore poređenja u Awk-u, hajde da ih bolje razumijemo koristeći primjer.
U ovom primjeru imamo datoteku pod nazivom food_list.txt koja je lista za kupovinu različitih prehrambenih artikala i želio bih označiti namirnice čija je količina manja ili jednaka 20 dodavanjem ( **)
na kraju svakog reda.
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
Opća sintaksa za korištenje operatora poređenja u Awk-u je:
expression { actions; }
Da bih postigao gore navedeni cilj, morat ću pokrenuti naredbu u nastavku:
# 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 **
U gornjem primjeru se dešavaju dvije važne stvari:
- Prvi izraz { action ; } kombinacija, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } ispisuje redove čija je količina manja ili jednaka 30 i dodaje (**) na kraju svakog reda. Vrijednosti količine se pristupa pomoću varijable polja $3.
- Drugi izraz { action ; } kombinacija, $3 > 30 { print $0 ;} ispisuje linije nepromijenjene jer je njihova količina veća od 30.
Još jedan primjer:
# 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
U ovom primjeru želimo da označimo linije sa količinom manjom ili jednakom 20 sa riječju (TRUE) na kraju.
Sažetak
Ovo je uvodni vodič za poređenje operatora u Awk, stoga morate isprobati mnoge druge opcije i otkriti više.
U slučaju bilo kakvih problema s kojima se susrećete ili bilo kakvih dodataka koje imate na umu, ostavite komentar u odeljku za komentare ispod. Ne zaboravite da pročitate sljedeći dio serije Awk gdje ću vas provesti kroz složene izraze.