
一直以來在查對條件是否比對時,我們使用的都是簡單的表達式。那如果你想用超過一個表達式來查對特定的條件呢?
本文,我們将看看如何在過濾文本和字元串時,結合多個表達式,即複合表達式,用以查對條件。
awk 的複合表達式可由表示“與”的組合操作符 <code>&&</code> 和表示“或”的 <code>||</code> 構成。
複合表達式的正常寫法如下:
這裡隻有當“第一個表達式” 和“第二個表達式”都是真值時整個表達式才為真。
這裡隻要“第一個表達式” 為真或“第二個表達式”為真,整個表達式就為真。
注意:切記要加括号。
表達式可以由比較操作符構成,具體可檢視 awk 系列的第四節。
現在讓我們通過一個例子來加深了解:
此例中,有一個文本檔案 <code>tecmint_deals.txt</code>,文本中包含着一張随機的 Tecmint 交易清單,其中包含了名稱、價格和種類。
我們隻想列印出價格超過 $20 且其種類為 “Tech” 的物品,在其行末用 (*) 打上标記。
我們将要執行以下指令。
此例,在複合表達式中我們使用了兩個表達式:
表達式 1:<code>($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/)</code> ;查找交易價格超過 <code>$20</code> 的行,即隻有當 <code>$3</code> 也就是價格滿足 <code>/^\$[2-9][0-9]*\.[0-9][0-9]$/</code> 時值才為真值。
表達式 2:<code>($4 == “Tech”)</code> ;查找是否有種類為 “<code>Tech</code>”的交易,即隻有當 <code>$4</code> 等于 “<code>Tech</code>” 時值才為真值。
切記,隻有當 <code>&&</code> 操作符的兩端狀态,也就是兩個表達式都是真值的情況下,這一行才會被打上 <code>(*)</code> 标志。
有些時候為了真正符合你的需求,就不得不用到複合表達式。當你掌握了比較和複合表達式操作符的用法之後,複雜的文本或字元串過濾條件也能輕松解決。
希望本向導對你有所幫助,如果你有任何問題或者補充,可以在下方發表評論,你的問題将會得到相應的解釋。
via: http://www.tecmint.com/combine-multiple-expressions-in-awk/
作者:Aaron Kili
譯者:martin2011qi
校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出