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