linux之shell awk 之一

liqilin0429發表於2011-01-24
awk抽取域 不輸出到螢幕上
oracle@ser168:~/qilin/demo> awk '{print $1,$2,$7}' grade.txt >wow_3.txt
awk抽取域 輸出到螢幕上
    oracle@ser168:~/qilin/demo> awk '{print $1,$4}' grade.txt | tee delete_mde_and_die
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
列印所有記錄
  oracle@ser168:~/qilin/demo> awk '{print $0}' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28 
列印報告頭
 oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name  belt\n-------------------"} {print $1"\t"$4}' grade.txt
name  belt
-------------------
M.Tansley       Green
J.Lulu  green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley       Brown-2
列印資訊尾
 oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name\n-----"} {print $1} end {"end-of-report"}' grade.txt
name
-----
M.Tansley
J.Lulu
P.Bunny
J.Troll
L.Tansley
 匹配 如果記錄包含模式b r o w n,就列印它:
 oracle@ser168:~/qilin/demo> awk '$0 ~ /Brown/' grade.txt
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28
 精確匹配--假定要使字串精確匹配,比如說檢視學生序號 4 8,檔案中有許多學生序號包含 4 8,如果在f i e l d - 3中查詢序號4 8,a w k將返回所有序號帶4 8的記錄:
oracle@ser168:~/qilin/demo> awk '{if($3~/48/) print $0}' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
 精確匹配--為精確匹配4 8,使用等號= =,並用單引號括起條件。例如 $ 3 = =“4 8” ,這樣確保只有4 8序號得以匹配,其餘則不行
oracle@ser168:~/qilin/demo> awk '$3=="48" {print $0}' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
不匹配--有時要瀏覽資訊並抽取不匹配操作的記錄,與 ~相反的符號是!~,意即不匹配。像原來使用查詢b r o w n腰帶級別的匹配操作一樣,現在看看不匹配情況。表示式 $0 !~/brown/,意即查詢不包含模式b r o w n腰帶級別的記錄並列印它
oracle@ser168:~/qilin/demo> awk '$0 !~/Brown/' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
P.Bunny         02/99   48        Yellow        12      35      28
大於
oracle@ser168:~/qilin/demo> awk '{if ($6>$7) print $1}' grade.txt
P.Bunny
L.Tansley
小於等於
oracle@ser168:~/qilin/demo> awk '{if ($6 <=$7) print $1}' grade.txt
M.Tansley
J.Lulu
J.Troll
設定大小寫
oracle@ser168:~/qilin/demo> awk '/[Gg]reen/' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
設定大小寫--為查詢大小寫資訊,可使用[ ]符號。在測試正規表示式時提到可匹配[ ]內任意字元或單詞,因此若查詢檔案中級別為g r e e n的所有記錄,不論其大小寫,表示式應為‘ / [ G g ] r e e n /: ’
oracle@ser168:~/qilin/demo> awk '$1~/^...a/' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
L.Tansley       05/99   4712      Brown-2       12      30      28
或關係匹配--為抽取級別為y e l l o w或b r o w n的記錄,使用豎線符 |。意為匹配 | 兩邊模式之一。注意,使用豎線符時,語句必須用圓括號括起來。
oracle@ser168:~/qilin/demo> awk '$0~/(Yellow|Brown)/' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28
11. AND--列印記錄,使其名字為‘ P. B u n n y且級別為 Ye l l o w,使用表示式 ( $ 1 = = " P. B u n n y " & &$ 4 = = " Ye l l o w " ),意為& &兩邊匹配均為真。完整命令如下:
oracle@ser168:~/qilin/demo> awk '{if ($1=="P.Bunny" && $4=="Yellow")print $0}' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
12. Or--如果查詢級別為Ye l l o w或B r o w n,使用或命令。意為“ | |”符號兩邊的匹配模式之一或全部為真。
oracle@ser168:~/qilin/demo> awk '{if ($4=="Yellow" || $4~/Brown/) print $0}' grade.txt
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20976446/viewspace-684538/,如需轉載,請註明出處,否則將追究法律責任。

相關文章