Sådan bruges sammensatte udtryk med Awk i Linux - Del 5


Hele tiden har vi kigget på enkle udtryk, når vi kontrollerer, om en betingelse er opfyldt eller ej. Hvad hvis du vil bruge mere end et udtryk til at kontrollere, om en bestemt tilstand er i?

I denne artikel skal vi se på, hvordan du kan kombinere flere udtryk kaldet sammensatte udtryk for at kontrollere, om der er en tilstand, når du filtrerer tekst eller strenge.

I Awk er sammensatte udtryk bygget ved hjælp af && benævnt (og) og || kaldet (eller) sammensatte operatører.

Den generelle syntaks for sammensatte udtryk er:

( first_expression ) && ( second_expression )

Her skal first_expression og second_expression være sandt for at gøre hele udtrykket sandt.

( first_expression ) || ( second_expression) 

Her skal et af udtrykkene enten first_expression eller second_expression være sandt for at hele udtrykket skal være sandt.

Forsigtig: Husk altid at medtage parentesen.

Udtrykkene kan bygges ved hjælp af de sammenligningsoperatorer, som vi så på i del 4 i awk-serien.

Lad os nu få en klar forståelse ved hjælp af et eksempel nedenfor:

I dette eksempel har en en tekstfil med navnet tecmint_deals.txt , som indeholder en liste over nogle fantastiske tilfældige Tecmint-tilbud, den inkluderer navnet på handlen, 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 

Sig, at vi kun vil udskrive og markere tilbud, der er over $ 20 og af typen "Tech" ved hjælp af (**) -tegnet i slutningen af hver linje.

Vi bliver nødt til at kø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 eksempel har vi brugt to udtryk i et sammensat udtryk:

  1. Første udtryk, ($ 3 ~ /^\ $ [2-9] [0-9] *. [0-9] [0-9] $ /); kontrollerer for linjer med tilbud med pris over $ 20, og det er kun sandt, hvis værdien af $ 3, som er prisen, matcher mønsteret /^\ $ [2-9] [0-9] **. [0-9] [0-9] $/
  2. Og det andet udtryk, ($ 4 == “Tech”); kontrollerer, om handlen er af typen "Tech", og det er kun sandt, hvis værdien på $ 4 er lig med "Tech".

Husk, at en linje kun vil blive markeret med (**) , hvis første udtryk og andet udtryk er sandt som angiver princippet for && operatøren.

Resumé

Nogle betingelser kræver altid, at sammensatte udtryk for at matche nøjagtigt det, du ønsker. Når du forstår brugen af sammenlignings- og sammensatte ekspressionsoperatorer, bliver det let at filtrere tekst eller strenge baseret på nogle vanskelige forhold.

Håber du finder denne guide nyttig, og hvis du har spørgsmål eller tilføjelser, skal du altid huske at skrive en kommentar, så din bekymring løses i overensstemmelse hermed.