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:
- 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] $/
- 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.