Kuidas kasutada liitväljendeid Awkiga Linuxis - 5. osa


Oleme kogu aeg vaadanud lihtsaid väljendeid, kontrollides, kas tingimus on täidetud või mitte. Mis siis, kui soovite konkreetse seisundi kontrollimiseks kasutada rohkem kui ühte avaldist?

Selles artiklis vaatleme, kuidas saate teksti või stringide filtreerimisel tingimuse kontrollimiseks ühendada mitu väljendit, mida nimetatakse liitväljenditeks.

Awkis koostatakse liitväljendid && abil, millele viidatakse kui (ja) ja || -le, millele viidatakse kui (või) liitoperaatorid.

Liitväljendite üldine süntaks on:

( first_expression ) && ( second_expression )

Siin peavad kogu väljendi tõeseks muutmiseks tõesed olema first_expression ja second_expression .

( first_expression ) || ( second_expression) 

Siin peab üks avaldistest first_expression või second_expression olema tõene, et kogu avaldis oleks tõene.

Ettevaatust: ärge unustage alati sulgusid lisada.

Avaldisi saab ehitada võrdlusoperaatorite abil, mida vaatasime awk-seeria 4. osas.

Saagem nüüd allpool toodud näite abil selge arusaam:

Selles näites on teil tekstifail nimega tecmint_deals.txt , mis sisaldab loetelu hämmastavatest juhuslikest Tecminti tehingutest, see sisaldab tehingu nime, hinda ja tüüpi.

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 

Oletame, et soovime printida ja märkida ainult tehinguid, mis ületavad 20 dollarit ja mille tüüp on „Tech”, kasutades iga rea lõpus märki (**) .

Peame käivitama alloleva käsu.

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

Selles näites oleme liitväljendis kasutanud kahte väljendit:

  1. Esimene avaldis, ($3 ~ /^\$[2-9][0-9]*\. [0-9] [0-9 ]$$); kontrollib ridu pakkumistega, mille hind ületab 20 dollarit, ja see on tõsi ainult siis, kui hind 3 dollarit, mis on hind, vastab mustrile /^\$[2-9][0-9]*\. [0-9] [0–9] $/
  2. Ja teine avaldis ($4 == “Tech”); kontrollib, kas tehing on tüüpi "Tech" ja see on tõene ainult siis, kui 4 dollari väärtus võrdub\"tehnikaga".

Pidage meeles, et rida tähistatakse tähisega (**) ainult juhul, kui esimene avaldis ja teine avaldis vastavad tõele, nagu ütleb operaatori && põhimõte.

Kokkuvõte

Mõni tingimus nõuab alati liitväljendite loomist, et need vastaksid täpselt sellele, mida soovite. Kui mõistate võrdlus- ja liitväljendite operaatorite kasutamist, muutub teksti või stringide filtreerimine mõne keerulise tingimuse alusel lihtsaks.

Loodetavasti leiate sellest juhendist kasuliku ning küsimuste või täienduste korral pidage alati meeles kommentaari ja teie mure lahendatakse vastavalt.