AWK工具使用學習筆記(一)

AWK 介紹:一個報文格式化,從文本文件中抽取數據包的工具。

思維: 基於模式動作形式,在動作前指定特定的模式,使動作在記錄滿足模式時才執行。

 

基本概念:

1、模式和動作:

模式:即觸發動作的條件,模式部分決定動作何時觸發及觸發事件。

可以是:a 條件語句 if($4=="Green")

                 b 複合語句  and &&)、 or||)、! 

                 c 正則表達式   awk '$0 ~/[Gg]reen/  {print  $0}'  grade.txt

動作:對數據進行的操作。 動作必須用{}括起來

2、域和記錄:

域:awk將標準輸入的每一行按照分隔符分成n個域,依次爲$1,$2,$3,…,$n

要輸出域採用print語句,輸出所有域使用$0.

 

 

判斷AWK語句錯誤的一些依據:

1)、確保整個awk命令用單引號括起來

2)、確保命令內的所有引號成對出現

3)、確保用花括號括起動作語句,用圓括號括起條件語句

 

重點知識點:

1AWK輸出報頭和報尾及格式化輸出。

BEGIN  END  採用print語句格式輸出

例如:

awk 'BEGIN {print "Name    Belt\n----------------------"} {print

 $1 "\t\t" $4} END {print "end-of-report"}' grade.txt

Name    Belt

----------------------

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    Brow-3  12      26      26

L.Tansley       05/99   4712    Brow-3  12      30      28

end-of-report

tom@svr:~/ssh$    

BEGIN: 設置計數和打印頭

END用來在a w k完成文本瀏覽動作後打印輸出文本總數和結尾狀態標誌

 

2、使用正則表達式  ~

1)打印第4個域值爲Greengreen的行

tom@svr:~/ssh$ awk '{if($4~/[Gg]reen/) print $0}' grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

tom@svr:~/ssh$  

2)打印第4個域值非Greengreen的行  !~

tom@svr:~/ssh$ awk '{if($4!~/[Gg]reen/) print $0}' grade.txt

P.Bunny         02/99   48      Yellow  12      35      28

J.Troll         07/99   4842    Brow-3  12      26      26

L.Tansley       05/99   4712    Brow-3  12      30      28

tom@svr:~/ssh$

3)匹配行中出現有特定字符的行,省去了if條件

tom@svr:~/ssh$ awk '$0 ~/[Gg]reen/ {print $0}' grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

tom@svr:~/ssh$

 

3、條件表達式

完全匹配某字符串  ==

tom@svr:~/ssh$ awk '{if($4=="Green") print $0}' grade.txt

M.Tansley       05/99   48311   Green   8       40      44

tom@svr:~/ssh$

不可寫成:

awk 'if($4=="Green") {print $0}' grade.txt

if條件是動作的一部分,必須與動作寫在一個花括號內。

 

 

AWK內置變量:

NR:已讀的記錄數

NF:瀏覽記錄的域個數

FILENAME: awk瀏覽的文件名 awk一次可以瀏覽多個文件

 

tom@svr:~/ssh$ awk '{if(NR>0 && $4~/(green|Green)/) print $0}' grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

tom@svr:~/ssh$

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章