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中國
如何通過 VLC 使用字幕
使用 VLC 媒體播放器播放和管理字幕的新手指南。
Unix 桌面:在 Linux 問世之前
僅僅開源還不足以實現開放,還需開放標準和建立共識。
Valve 對於 Ubuntu 的 Snap 版本的 Steam 並不滿意:原因何在
你可能會發現,Snap 版本的 Steam 並不如你期待的那樣好,你怎麼看?
Wine 9.0 發布,實驗性地加入了 Wayland 驅動
Wine 的這個新版本正在為未來做好準備!