Cum să utilizați expresii compuse cu Awk în Linux - Partea 5


Tot timpul, ne-am uitat la expresii simple atunci când verificăm dacă o condiție a fost îndeplinită sau nu. Ce se întâmplă dacă doriți să utilizați mai multe expresii pentru a verifica o anumită condiție?

În acest articol, vom arunca o privire la modul în care puteți combina mai multe expresii denumite expresii compuse pentru a verifica o condiție atunci când filtrați text sau șiruri.

În Awk, expresiile compuse sunt create folosind && denumit (și) și | | denumiți operatori compuși (sau).

Sintaxa generală pentru expresiile compuse este:

( first_expression ) && ( second_expression )

Aici, first_expression și second_expression trebuie să fie adevărate pentru ca întreaga expresie să fie adevărată.

( first_expression ) || ( second_expression) 

Aici, una dintre expresiile fie first_expression, fie second_expression trebuie să fie adevărată pentru ca întreaga expresie să fie adevărată.

Atenție: nu uitați să includeți întotdeauna paranteza.

Expresiile pot fi construite folosind operatorii de comparație pe care i-am analizat în partea 4 a seriei awk.

Acum să înțelegem clar folosind un exemplu de mai jos:

În acest exemplu, aveți un fișier text numit tecmint_deals.txt, care conține o listă cu câteva oferte uimitoare aleatorii Tecmint, care include numele ofertei, prețul și tipul.

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 

Să presupunem că vrem doar tipărirea și semnalarea ofertelor care depășesc 20 USD și de tipul \„Tehnologie” folosind semnul (**) de la capătul fiecărei linii.

Va trebui să rulăm comanda de mai jos.

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

În acest exemplu, am folosit două expresii într-o expresie compusă:

  1. Prima expresie, ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; verifică liniile cu oferte cu preț peste 20 USD și este adevărat numai dacă valoarea de 3 USD, care este prețul, se potrivește cu modelul /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
  2. Și a doua expresie, ($4 == „Tech”) ; verifică dacă afacerea este de tipul \„Tech” și este adevărată numai dacă valoarea de $4 este egală cu \„Tech”.< /li>

Amintiți-vă, o linie va fi semnalizată numai cu (**), dacă prima expresie și a doua expresie sunt adevărate, așa cum afirmă principiul operatorul &&.

rezumat

Unele condiții necesită întotdeauna construirea de expresii compuse pentru ca dvs. să se potrivească exact cu ceea ce doriți. Atunci când înțelegeți utilizarea operatorilor de comparație și expresii compuse, filtrarea textului sau a șirurilor de caractere pe baza unor condiții dificile va deveni ușoară.

Sper că veți găsi acest ghid util și pentru orice întrebări sau completări, amintiți-vă întotdeauna să lăsați un comentariu și preocuparea dvs. va fi rezolvată în consecință.