Linux中國
awk 系列:如何使用 awk 複合表達式
一直以來在查對條件是否匹配時,我們使用的都是簡單的表達式。那如果你想用超過一個表達式來查對特定的條件呢?
本文中,我們將看看如何在過濾文本和字元串時,結合多個表達式,即複合表達式,用以查對條件。
awk 的複合表達式可由表示「與」的組合操作符 && 和表示「或」的 || 構成。
複合表達式的常規寫法如下:
( 第一個表達式 ) && ( 第二個表達式 )
這裡只有當「第一個表達式」 和「第二個表達式」都是真值時整個表達式才為真。
( 第一個表達式 ) || ( 第二個表達式)
這裡只要「第一個表達式」 為真或「第二個表達式」為真,整個表達式就為真。
注意:切記要加括弧。
表達式可以由比較操作符構成,具體可查看 awk 系列的第四節。
現在讓我們通過一個例子來加深理解:
此例中,有一個文本文件 tecmint_deals.txt,文本中包含著一張隨機的 Tecmint 交易清單,其中包含了名稱、價格和種類。
TecMint Deal List
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
我們只想列印出價格超過 $20 且其種類為 「Tech」 的物品,在其行末用 (*) 打上標記。
我們將要執行以下命令。
# awk '($3 ~ /^$[2-9][0-9]*.[0-9][0-9]$/) && ($4=="Tech") { printf "%st%sn",$0,"*"; } ' tecmint_deals.txt
6 Ditto_Bluetooth_Altering_Device $33.00 Tech *
7 Nano_Prowler_Mini_Drone $36.99 Tech *
此例,在複合表達式中我們使用了兩個表達式:
- 表達式 1:
($3 ~ /^$[2-9][0-9]*.[0-9][0-9]$/);查找交易價格超過$20的行,即只有當$3也就是價格滿足/^$[2-9][0-9]*.[0-9][0-9]$/時值才為真值。 - 表達式 2:
($4 == 「Tech」);查找是否有種類為 「Tech」的交易,即只有當$4等於 「Tech」 時值才為真值。 切記,只有當&&操作符的兩端狀態,也就是兩個表達式都是真值的情況下,這一行才會被打上(*)標誌。
總結
有些時候為了真正符合你的需求,就不得不用到複合表達式。當你掌握了比較和複合表達式操作符的用法之後,複雜的文本或字元串過濾條件也能輕鬆解決。
希望本嚮導對你有所幫助,如果你有任何問題或者補充,可以在下方發表評論,你的問題將會得到相應的解釋。
via: http://www.tecmint.com/combine-multiple-expressions-in-awk/
作者:Aaron Kili 譯者:martin2011qi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive
對這篇文章感覺如何?
太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
More in:Linux中國
捐贈 Let's Encrypt,共建安全的互聯網
隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
Let's Encrypt 正式發布,已經保護 380 萬個域名
由於 Let's Encrypt 讓安裝 X.509 TLS 證書變得非常簡單,所以這個數量增長迅猛。
關於Linux防火牆iptables的面試問答
Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
Lets Encrypt 已被所有主流瀏覽器所信任
旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...

















