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