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:

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