Zoeken op website

Samengestelde expressies gebruiken met Awk in Linux - Deel 5


Al die tijd hebben we naar eenvoudige uitdrukkingen gekeken bij het controleren of aan een voorwaarde is voldaan of niet. Wat als u meer dan één expressie wilt gebruiken om te controleren op een bepaalde voorwaarde?

In dit artikel zullen we bekijken hoe u meerdere expressies, ook wel samengestelde expressies genoemd, kunt combineren om te controleren op een voorwaarde bij het filteren van tekst of tekenreeksen.

In Awk worden samengestelde expressies gebouwd met behulp van de && waarnaar verwezen wordt als (en) en de | | ook wel (of) samengestelde operatoren genoemd.

De algemene syntaxis voor samengestelde uitdrukkingen is:

( first_expression ) && ( second_expression )

Hier moeten eerste_expressie en tweede_expressie waar zijn om de hele expressie waar te maken.

( first_expression ) || ( second_expression) 

Hier moet een van de expressies eerste_expressie of tweede_expressie waar zijn om de hele expressie waar te maken.

Let op: vergeet niet om altijd haakjes te plaatsen.

De expressies kunnen worden opgebouwd met behulp van de vergelijkingsoperatoren die we in deel 4 van de awk-serie hebben bekeken.

Laten we nu een duidelijk begrip krijgen aan de hand van een voorbeeld hieronder:

In dit voorbeeld heb je een tekstbestand met de naam tecmint_deals.txt, dat een lijst bevat met een aantal verbazingwekkende willekeurige Tecmint-deals, inclusief de naam van de deal, de prijs en het type.

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 

Stel dat we alleen deals willen afdrukken en markeren die hoger zijn dan € 20 en van het type “Tech”, met behulp van het (**)-teken aan het einde van elke lijn.

We zullen de onderstaande opdracht moeten uitvoeren.

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

In dit voorbeeld hebben we twee uitdrukkingen gebruikt in een samengestelde uitdrukking:

  1. Eerste expressie, ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; controleert de regels met deals met een prijs boven $20, en dit is alleen waar als de waarde van $3, wat de prijs is, overeenkomt met het patroon /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
  2. En de tweede uitdrukking, ($4 == “Tech”) ; controleert of de deal van het type “Tech” is en deze is alleen waar als de waarde van $4 gelijk is aan “Tech”.

Houd er rekening mee dat een regel alleen wordt gemarkeerd met de (**), als eerste expressie en tweede expressie waar zijn, zoals het principe van de &&-operator.

Samenvatting

Sommige voorwaarden vereisen altijd dat u samengestelde expressies opbouwt, zodat u precies kunt overeenkomen met wat u wilt. Als u het gebruik van vergelijkings- en samengestelde expressieoperatoren begrijpt, wordt het filteren van tekst of tekenreeksen op basis van enkele moeilijke omstandigheden eenvoudig.

Ik hoop dat u deze handleiding nuttig vindt en als u vragen of aanvullingen heeft, vergeet dan niet om een reactie achter te laten. Uw probleem zal dienovereenkomstig worden opgelost.