Cum să utilizați operatorii de comparație cu Awk în Linux - Partea 4


Când aveți de-a face cu valori numerice sau șiruri dintr-o linie de text, filtrarea textului sau a șirurilor de caractere folosind operatori de comparare este utilă pentru utilizatorii comenzii Awk.

În această parte a seriei Awk, vom arunca o privire asupra modului în care puteți filtra textul sau șirurile de caractere folosind operatori de comparație. Dacă ești programator, atunci trebuie să fii deja familiarizat cu operatorii de comparație, dar cei care nu sunt, permiteți-mi să vă explic în secțiunea de mai jos.

Ce sunt operatorii de comparație în Awk?

Operatorii de comparație din Awk sunt utilizați pentru a compara valoarea numerelor sau a șirurilor de caractere și includ următoarele:

  1. > – mai mare decât
  2. – mai puțin decât
  3. >= – mai mare sau egal cu
  4. – mai mic sau egal cu
  5. == – egal cu
  6. != – nu este egal cu
  7. some_value ~/pattern/ – adevărat dacă some_value se potrivește cu modelul
  8. some_value !~/pattern/ – adevărat dacă some_value nu se potrivește cu modelul

Acum că ne-am uitat la diferiții operatori de comparație din Awk, să-i înțelegem mai bine folosind un exemplu.

În acest exemplu, avem un fișier numit listă_alimente.txt care este o listă de cumpărături pentru diferite produse alimentare și aș dori să semnalez produsele alimentare a căror cantitate este mai mică sau egală cu 20 adăugând ( **) la sfârșitul fiecărei linii.

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

Sintaxa generală pentru utilizarea operatorilor de comparație în Awk este:

# expression { actions; }

Pentru a atinge obiectivul de mai sus, va trebui să rulez comanda de mai jos:

# 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	**

În exemplul de mai sus, există două lucruri importante care se întâmplă:

  1. Prima expresie { acțiune ; } combinație, $3 <= 30 { printf „%s\t%s\n”, $0,”**” ; } tipărește linii cu o cantitate mai mică sau egală cu 30 și adaugă un (**) la sfârșitul fiecărui rând. Valoarea cantității este accesată folosind variabila de câmp $3.
  2. A doua expresie { action ; } combinație, $3 > 30 { print $0 ;} tipărește linii neschimbate, deoarece cantitatea lor este mai mare decât 30.

Inca un exemplu:

# 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

În acest exemplu, dorim să indicăm linii cu o cantitate mai mică sau egală cu 20 cu cuvântul (ADEVĂRAT) la sfârșit.

rezumat

Acesta este un tutorial introductiv pentru operatorii de comparare în Awk, prin urmare trebuie să încercați multe alte opțiuni și să descoperiți mai multe.

În cazul oricăror probleme cu care vă confruntați sau orice adăugări pe care le aveți în vedere, atunci lăsați un comentariu în secțiunea de comentarii de mai jos. Nu uitați să citiți următoarea parte a seriei Awk, unde vă voi ghida prin expresii compuse.