Kako koristiti operatore usporedbe s Awkom u Linuxu - 4. dio
Kada se radi s brojčanim ili nizovnim vrijednostima u retku teksta, filtriranje teksta ili nizova pomoću operatora usporedbe dobro dolazi korisnicima naredbi Awk.
U ovom ćemo dijelu serije Awk pogledati kako možete filtrirati tekst ili nizove pomoću operatora usporedbe. Ako ste programer, tada već morate biti upoznati s operaterima usporedbe, ali onima koji to nisu, dopustite mi da objasnim u sljedećem odjeljku.
Operatori usporedbe u Awku koriste se za usporedbu vrijednosti brojeva ili nizova i uključuju sljedeće:
>
- veće od-
<
- manje od -
> =
- veći ili jednak -
<=
- manje ili jednako -
==
- jednako -
! =
- nije jednako -
some_value ~/pattern/
- vrijedi ako se neka_vrijednost podudara sa uzorkom -
some_value! ~/pattern/
- true ako neka_vrijednost ne odgovara obrascu
Sad kad smo pogledali razne operatore usporedbe u Awku, shvatimo ih bolje na primjeru.
U ovom primjeru imamo datoteku nazvanu food_list.txt koja je popis za kupnju različitih prehrambenih proizvoda i želio bih označiti prehrambene proizvode čija je količina manja ili jednaka 20 dodavanjem (**)
na kraju svakog retka.
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 upotrebu operatora usporedbe u Awk je:
# expression { actions; }
Da bih postigao gornji cilj, morat ću pokrenuti naredbu ispod:
# 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 događaju se dvije važne stvari:
- Prvi izraz {action; } kombinacija, $3 <= 30 {printf “% s\t% s\n”, $0, ”**”; } ispisuje retke s količinom manjom ili jednakom 30 i dodaje (**) na kraju svakog retka. Vrijednosti količine pristupa se pomoću varijable polja $3.
- Drugi izraz {action; } kombinacija, $3> 30 {print $0;} ispisuje redove 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 označiti linije s količinom manjom ili jednakom 20 s riječi (TRUE) na kraju.
Sažetak
Ovo je uvodni vodič za operatore usporedbe u Awku, stoga morate isprobati mnoge druge mogućnosti i otkriti više.
U slučaju bilo kakvih problema s kojima se suočavate ili bilo kakvih dodataka koje imate na umu, ispustite komentar u odjeljak za komentare u nastavku. Ne zaboravite pročitati sljedeći dio serije Awk gdje ću vas provesti kroz složene izraze.