天天看點

awk 系列Part5:如何使用 awk 複合表達式awk 系列:如何使用 awk 複合表達式

awk 系列Part5:如何使用 awk 複合表達式awk 系列:如何使用 awk 複合表達式

一直以來在查對條件是否比對時,我們使用的都是簡單的表達式。那如果你想用超過一個表達式來查對特定的條件呢?

本文,我們将看看如何在過濾文本和字元串時,結合多個表達式,即複合表達式,用以查對條件。

awk 的複合表達式可由表示“與”的組合操作符 <code>&amp;&amp;</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>&amp;&amp;</code> 操作符的兩端狀态,也就是兩個表達式都是真值的情況下,這一行才會被打上 <code>(*)</code> 标志。

有些時候為了真正符合你的需求,就不得不用到複合表達式。當你掌握了比較和複合表達式操作符的用法之後,複雜的文本或字元串過濾條件也能輕松解決。

希望本向導對你有所幫助,如果你有任何問題或者補充,可以在下方發表評論,你的問題将會得到相應的解釋。

via: http://www.tecmint.com/combine-multiple-expressions-in-awk/

作者:Aaron Kili

譯者:martin2011qi

校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

繼續閱讀