Slik bruker du sammensatte uttrykk med Awk i Linux - Del 5
Hele tiden har vi sett på enkle uttrykk når vi skal sjekke om et vilkår er oppfylt eller ikke. Hva om du vil bruke mer enn ett uttrykk for å se etter en bestemt tilstand i?
I denne artikkelen skal vi ta en titt på hvordan du kan kombinere flere uttrykk referert til som sammensatte uttrykk for å se etter en betingelse når du filtrerer tekst eller strenger.
I Awk bygges sammensatte uttrykk ved hjelp av &&
referert til som (og)
og | |
referert til som (eller)
sammensatte operatorer.
Den generelle syntaksen for sammensatte uttrykk er:
( first_expression ) && ( second_expression )
Her må first_expression
og second_expression
være sanne for å gjøre hele uttrykket sant.
( first_expression ) || ( second_expression)
Her må ett av uttrykkene enten first_expression
eller second_expression
være sant for at hele uttrykket skal være sant.
Forsiktig: Husk å alltid inkludere parentesen.
Uttrykkene kan bygges ved hjelp av sammenligningsoperatorene som vi så på i del 4 av awk-serien.
La oss nå få en klar forståelse ved å bruke et eksempel nedenfor:
I dette eksemplet har en tekstfil som heter tecmint_deals.txt
, som inneholder en liste over noen fantastiske tilfeldige Tecmint-avtaler, den inkluderer navnet på avtalen, prisen og typen.
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
Si at vi bare vil ha utskrifts- og flaggavtaler som er over $20 og av typen “Tech ” ved å bruke (**)
-tegnet på slutten av hver linje.
Vi må kjøre kommandoen nedenfor.
# 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 *
I dette eksemplet har vi brukt to uttrykk i et sammensatt uttrykk:
- Første uttrykk, ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; sjekker for linjene med avtaler med pris over $20, og det er bare sant hvis verdien av $3 som er prisen samsvarer med mønsteret /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
- Og det andre uttrykket, ($4 == “Tech”) ; sjekker om avtalen er av typen “Tech ”, og det er bare sant hvis verdien på $4 er lik “Tech ”.
Husk at en linje bare vil bli flagget med (**)
, hvis første uttrykk og andre uttrykk er sanne som angir prinsippet for &&
operatør.
Sammendrag
Noen forhold krever alltid å bygge sammensatte uttrykk for at du skal matche akkurat det du ønsker. Når du forstår bruken av sammenlignings- og sammensatte uttrykksoperatorer, blir det enkelt å filtrere tekst eller strenger basert på noen vanskelige forhold.
Håper du finner denne veiledningen nyttig, og for eventuelle spørsmål eller tillegg, husk alltid å legge igjen en kommentar og bekymringen din vil bli løst deretter.