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


Cijelo vrijeme promatrali smo jednostavne izraze kada smo provjeravali je li uvjet ispunjen ili ne. Što ako želite upotrijebiti više od jednog izraza za provjeru određenog stanja u?

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

U Awk-u se složeni izrazi grade pomoću && označenih kao (and) i || koji se nazivaju (ili) složeni operateri.

Općenita sintaksa složenih izraza je:

( first_expression ) && ( second_expression )

Ovdje prvi_izraz i drugi_izraz moraju biti istiniti da bi cijeli izraz bio istinit.

( first_expression ) || ( second_expression) 

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

Oprez: Ne zaboravite uvijek uključiti zagrade.

Izrazi se mogu graditi pomoću operatora usporedbe koje smo pogledali u 4. dijelu awk serije.

Dajmo sada jasno razumijevanje pomoću primjera u nastavku:

U ovom primjeru, imate tekstualnu datoteku pod nazivom tecmint_deals.txt , koja sadrži popis nevjerojatnih slučajnih 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 ispisati i označiti ponude veće od 20 USD i tipa "Tech" pomoću znaka (**) na kraju svakog retka.

Morat ćemo pokrenuti 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 smo primjeru upotrijebili dva izraza u složenom izrazu:

  1. Prvi izraz, ($3 ~ /^\$[2-9][0-9]*\.[0-9]assign provjerava redove s ponudama s cijenom većom od 20 USD i istinito je samo ako vrijednost od 3 USD, koja je cijena odgovara obrascu /^\$[2-9][0-9]*\.[0-9] [0-9] $/
  2. I drugi izraz, ($4 == "Tech"); provjerava je li posao tipa "Tech" i istinito je samo ako je vrijednost od 4 dolara jednaka "Tech".

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

Sažetak

Neki uvjeti uvijek zahtijevaju izradu složenih izraza kako biste točno odgovarali onome što želite. Kad shvatite upotrebu operatora usporedbe i složenih izraza, filtriranje teksta ili nizova na temelju nekih teških uvjeta postat će lako.

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