Kako koristiti složene izraze s Awk u Linuxu - 5. dio


Sve vreme smo gledali jednostavne izraze kada smo proveravali da li je uslov ispunjen ili ne. Što ako želite koristiti više od jednog izraza za provjeru određenog stanja?

U ovom članku ćemo pogledati kako možete kombinirati više izraza koji se nazivaju složeni izrazi da biste provjerili da li postoji uslov prilikom filtriranja teksta ili nizova.

U Awk, složeni izrazi se grade pomoću && koji se naziva (and) i | | koji se naziva (ili) složeni operatori.

Opća sintaksa za složene izraze je:

( first_expression ) && ( second_expression )

Ovdje, first_expression i second_expression moraju biti istiniti da bi cijeli izraz bio istinit.

( first_expression ) || ( second_expression) 

Ovdje jedan od izraza ili prvi_izraz ili drugi_izraz mora biti istinit da bi cijeli izraz bio istinit.

Oprez: Ne zaboravite uvijek uključiti zagrade.

Izrazi se mogu izgraditi pomoću operatora poređenja koje smo pogledali u 4. dijelu serije awk.

Hajde da sada dobijemo jasno razumevanje koristeći primer u nastavku:

U ovom primjeru, a imaju tekstualnu datoteku pod nazivom tecmint_deals.txt, koja sadrži listu nekih nevjerovatnih nasumičnih Tecmint ponuda, uključuje naziv ponude, cijenu i vrstu.

No      Name                                    Price           Type
1       Mac_OS_X_Cleanup_Suite                  $9.99           Software
2       Basics_Notebook                         $14.99          Lifestyle
3       Tactical_Pen                            $25.99          Lifestyle
4       Scapple                                 $19.00          Unknown
5       Nano_Tool_Pack                          $11.99          Unknown
6       Ditto_Bluetooth_Altering_Device         $33.00          Tech
7       Nano_Prowler_Mini_Drone                 $36.99          Tech 

Recimo da želimo samo ponude za štampanje i označavanje koje su iznad $20 i tipa “Tech ” koristeći znak (**) na kraju svakog reda.

Moraćemo da pokrenemo naredbu ispod.

# awk '($3 ~ /^$[2-9][0-9]*\.[0-9][0-9]$/) && ($4=="Tech") { printf "%s\t%s\n",$0,"*"; } ' tecmint_deals.txt 

6	Ditto_Bluetooth_Altering_Device		$33.00		Tech	*
7	Nano_Prowler_Mini_Drone			$36.99          Tech	 *

U ovom primjeru koristili smo dva izraza u složenom izrazu:

  1. Prvi izraz, ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; provjerava redove s ponudama s cijenom iznad $20, i to je tačno samo ako vrijednost od $3, što je cijena, odgovara uzorku /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
  2. I drugi izraz, ($4 == “Tehnika”) ; provjerava da li je posao tipa “Tech ” i istinit je samo ako je vrijednost od $4 jednaka “Tech ”.

Zapamtite, linija će biti označena samo sa (**), ako su prvi izraz i drugi izraz istiniti kao što navodi princip && operator.

Sažetak

Neki uvjeti uvijek zahtijevaju pravljenje složenih izraza kako biste odgovarali tačno onome što želite. Kada shvatite upotrebu operatora poređenja i složenog izraza, filtriranje teksta ili nizova na osnovu nekih teških uslova će postati lako.

Nadamo se da će vam ovaj vodič biti koristan i za bilo kakva pitanja ili dodatke, uvijek ne zaboravite ostaviti komentar i vaša zabrinutost će biti riješena u skladu s tim.