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