Vyhledávání na webu

Jak používat složené výrazy s Awk v Linuxu - část 5


Celou dobu jsme se dívali na jednoduché výrazy při kontrole, zda byla podmínka splněna nebo ne. Co když chcete použít více než jeden výraz pro kontrolu konkrétní podmínky?

V tomto článku se podíváme na to, jak můžete kombinovat více výrazů označovaných jako složené výrazy, abyste zkontrolovali podmínku při filtrování textu nebo řetězců.

V Awk jsou složené výrazy sestaveny pomocí && označovaných jako (and) a | | označované jako složené operátory (nebo).

Obecná syntaxe složených výrazů je:

( first_expression ) && ( second_expression )

Zde musí být first_expression a second_expression pravdivé, aby byl celý výraz pravdivý.

( first_expression ) || ( second_expression) 

Zde musí být jeden z výrazů first_expression nebo second_expression pravdivý, aby byl celý výraz pravdivý.

Upozornění: Nezapomeňte vždy uvést závorky.

Výrazy lze sestavit pomocí operátorů porovnání, na které jsme se podívali ve 4. části série awk.

Pojďme nyní jasně pochopit pomocí níže uvedeného příkladu:

V tomto příkladu máme textový soubor s názvem tecmint_deals.txt, který obsahuje seznam některých úžasných náhodných nabídek Tecmint, obsahuje název obchodu, cenu a typ.

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 

Řekněme, že chceme vytisknout a označit pouze nabídky, které jsou vyšší než 20 $ a typu “Tech ” s použitím znaku (**) na konci každého řádku.

Budeme muset spustit příkaz níže.

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

V tomto příkladu jsme ve složeném výrazu použili dva výrazy:

  1. První výraz, ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; zkontroluje řádky s nabídkami s cenou nad 20 $ a platí to pouze tehdy, pokud hodnota 3 $, což je cena, odpovídá vzoru /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
  2. A druhý výraz, (4 $== “Tech”) ; zkontroluje, zda je dohoda typu “Tech ” a je pravdivá pouze v případě, že hodnota 4 $ se rovná „Tech ”.

Pamatujte, že řádek bude označen příznakem (**) pouze v případě, že první výraz a druhý výraz jsou pravdivé, jak uvádí princip operátor &&.

souhrn

Některé podmínky vždy vyžadují vytvoření složených výrazů, aby přesně odpovídaly tomu, co chcete. Když pochopíte použití operátorů porovnání a složených výrazů, filtrování textu nebo řetězců na základě některých obtížných podmínek bude snadné.

Doufám, že pro vás bude tato příručka užitečná a v případě jakýchkoli dotazů nebo doplnění nezapomeňte vždy zanechat komentář a vaše obavy budou odpovídajícím způsobem vyřešeny.