標籤:blog 使用 檔案 ar 2014 代碼 html log amp
【著作權聲明:轉載請保留出處:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
在之前grep章節中用到很多Regex,這一節將在awk條件操作中使用Regex。awk 允許使用Regex,根據Regex是否匹配當前行來選擇執行獨立代碼塊。
下面先給出awk的條件操作符:
< 小於
<= 小於等於
== 等於
!= 不等於
> 大於
>= 大於等於
~ 匹配Regex
!~ 不匹配Regex
這一節繼續使用上一節操作檔案
1. 匹配
我們如果想篩選只符合條件(比如只要組名為aln)的行,可以這樣寫:
## awk '$1~/aln/{print}' group_file1aln x 1001# awk'/aln/{print}' group_file1aln x 1001# awk '{if ($1 ~/aln/)print}' group_file1aln x 1001# awk '$1~/aln/'group_file1 //沒有具體動作(如print),可以不用花括弧,預設動作是列印所有匹配記錄。aln x 1001
上面四種方法都是列印第一個域包含aln的行,同理!~操作符號使用方法相同。
2. 精確匹配
如果要精確匹配,可以使用==操作符。 例如:
# awk '$3 =="984"{print}' group_file1vboxusers x 984allen# awk '{if($3=="984")print}' group_file1vboxusers x 984allen# awk'$3=="984"' group_file1vboxusers x 984allen#
!=操作符號使用類似。
3. 大於
下面樣本使用如下被操作檔案:
# catgroup_file2wireshark x 987123usbmon x 986 999jackuser x 985 985vboxusers x 9841003 allenaln x 1001 787
以下樣本輸出滿足$3 > $4的行的組名稱:
# awk '{if($3>$4)print $1}' group_file2wiresharkaln# awk'$3>$4{print $1}' group_file2wiresharkaln
操作符號<=、>、>=使用類似。
4. 行首匹配
# awk'$1~/^....user/' group_file2jackuser x 985985vboxusers x 9841003 allen# awk '{if($1~/^....user/)print}' group_file2jackuser x 985985vboxusers x 9841003 allen
awk 還允許使用布林運算子 "||"(邏輯與)和"&&"(邏輯或),以便建立更複合布林運算式,複合運算式即為模式間通過使用下述各運算式互相結合起來的運算式:
&& AND :語句兩邊必須同時匹配為真。
|| OR:語句兩邊同時或其中一邊匹配為真。
! 非求逆
5. 求與:
# awk'$1~/^....user/ && $3==985' group_file2jackuser x 985985# awk '{if($1~/^....user/ && $3 == 985)print}' group_file2jackuser x 985985
6. 求或
# awk '{if($1~/^....user/ || $3 == 1001)print}' group_file2jackuser x 985985vboxusers x 9841003 allenaln x 1001 787
7. 求非
# awk'!($1~/^....user/)' group_file2wireshark x 987123usbmon x 986 999aln x 1001 787
shell文本過濾編程(三):awk之條件判斷