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:

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

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