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:

  1. > – veći od
  2. < – manje od
  3. >= – veće ili jednako
  4. <= – manje ili jednako
  5. == – jednako
  6. != – nije jednako
  7. some_value ~/pattern/ – istina ako se neka_vrijednost poklapa sa uzorkom
  8. some_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:

  1. 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.
  2. 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.