天天看點

AWK——的使用

   Awk的使用

1     awk的基礎知識

   awk是文本與資料的處理工具

   awk的特點是可以程式設計,并且處理靈活,功能更強大

   awk的應用:統計和制表等等

2     awk的處理方式和格式

   awk一次處理一行内容

   awk對每行可以切片處理

3   awk的格式有

   指令行格式

   腳本格式

4   指令行格式有

   基本格式

   擴充格式

5   基本格式

   awk

   參數

   指令

  操作的檔案 

6   指令由兩部分組成

   正規表達式或邏輯判斷式

   awk操作指令

7   awk操作指令語句

   内置函數

   控制指令

8  awk的内置參數

   内置參數的使用格式(awk  -F  ’:指定的分割符’  ’{print 内置參數}’  檔案名)awk的内置變量1: $0表示整個目前行 $1每行第一個字段 $2每行第二個字段,awk内置參數的分割符  參數:-F  ’指定的分割符’  如果沒有寫将預設為空格,如果想要多個字段加逗号

9    awk的内置變量2

    NR每行的行号  NF字段數量的總數或每行的列數  FILENAME正在處理的檔案名

   案例一: 顯示檔案中的每行的行号,每行的列數和對應行的使用者名

   第一種  用print   awk -F  ’:’  ’{print ”Line行号: ”NR, ”Col列數:”NF”,”User使用者名: ”$1}’  檔案名

   第二種  用printf  awk -F  ’:’  ’{printf (”Line:%s  Col:%s  User:%s\n”,NR,

NF,$1)}’ 檔案名  (s前面加上字元數,顯示的時候格式會更整齊)

   案例二: 顯示檔案中使用者ID大于100的行号和使用者名

awk -F  ’:’  ’{if條件判斷  ($3>100)  pint  ”Line:”NR, ”User: ”$1}’  檔案名

   案例三: 在伺服器log中找出Error的發生日期

   第一種: sed  ’/Error/p’ fresh.log  |  awk  ’{print  $1}’用sed找出有Error的行

    第二種: awk  ’/Error/{print  $1}’ fresh.log  用awk定位Error

10   邏輯判斷式

   ~,!~比對正規表達式      比對   不比對

   awk   -F  ’:’  ’要列印的東西如$1邏輯判斷式如~/比對的條件如^m.*/{print  $1}’ 檔案名        列印出檔案中所有以m開頭的第一個字段

   = =,!=,< ,>判斷邏輯表達式      等于   不等于     小于     大于

   awk -F  ’:’   ’輸出的條件如$3>100  {print  $!,$3}’  檔案名

   列印出檔案中所有小于100的第一個字段和第三個字段

11      擴充格式

   在基本格式之前加入BEGIN,在基本格式之後加入END        

   案例一:  制表顯示/etc/passwd每行的行号,每行的列數,對應行的使用者名

awk  -F  ’:’ 開頭部分’BEIND{print  “LINE行号  COL列數 USER使用者名}’

   循環部分要列印的字段{print  NR每行的行号,NE每行的列數,$1每行的第一個字段}結尾部分END{print”------”FITENAME”------”}’   檔案名

12    awk的邏輯處理案例

   案例一: 統計目前檔案夾下的檔案和檔案夾占用的大小

ls  -l  |  awk  ’BEGIN (size=0)}{size+=$5}END{print  “ size is ” size/1024/1024”M” }’

   案例二: 統計顯示/etc/passwd/的賬戶總人數

awk -F  ’:’  ‘BEGIN{count=0}$1!~/^$/{count++}END{print “count= ”count}’ 檔案名

   統計顯示UID大于100的使用者名

Awk  -F  ‘:’  ‘BEGIN{count=0}{if  ($3 > 100) name[count++]=$1}END{for

(i=0;i<count;i++) print i,name[i]}’  passwd

   案例三: 統計netstat-anp狀态下為LISTEN和CONNECTED的連接配接數量

Netstat  -anp |  awk  ‘$6~/CONNECTED|LISTEN/{sum[$6]++}END{for  (i  in  sum)print  i,sum[i]}’

13    sed和awk的差別

   sed側重于正則處理

   sed和awk可以共同使用

   awk和sed都可以處理文本

   awk側重于複雜的邏輯處理

本文轉自 拉考的考拉 51CTO部落格,原文連結:http://blog.51cto.com/lakaodekaola/1929164