AWK 是一種處理文本文件的語言,是一個強大的文本分析工具。
之因此叫 AWK 是由於其取了三位創始人 Alfred Aho,Peter Weinberger 和 Brian Kernighan 的 Family Name 的首字符。
相較於sed經常做用於一整個行的處理,awk則比較傾向於一行當中分紅數個字段來處理,由於awk至關適合小型的文本數據。shell
1 awk [選項參數] 'script' var=value file(s) 2 或 3 awk [選項參數] -f scriptfile var=value file(s)
awk後面接兩個單引號並加上大括號{ }來設置想要對數據進行的處理操做,awk能夠處理後續接的文件,也能夠讀取來自前個命令的標準輸,但若是awk主要是處理每一行的字段內的數據時,默認的字段分隔符爲「空格鍵」或「Tab鍵」數組
FS∶ 列分割符。指定每行文本的字段分隔符,默認爲空格或製表位。與"-F"做用相同
NF∶ 當前處理的行的字段個數。
NR∶ 當前處理的行的行號(序數)。
$0∶當前處理的行的整行內容。
$n∶ 當前處理行的第n個字段(第n列)。
FILENAME∶ 被處理的文件名。
RS∶ 行分隔符。awk從文件上讀取資料時,將根據RS的定義把資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進行處理。預設值是’\n’bash
1 echo $PATH | awk 'BEGIN{RS=":"};END{print NR}' #統計以冒號分隔的文本段落數,END{}語句塊中,每每會放入打印結果等語句 2 3 awk -F: '/bash$/{print | "wC -1"}' /etc/passwd #調用wc -1命令統計使用bash 的用戶個數,等同於grep -c "bash$" /etc/passwd 4 5 free -m | awk '/Mem:/ {print int($3/($3+$4)*100)"%"}' #查看當前 內存使用百分比 6 7 top -b -n 1| grep Cpu | awk-F ',' '{print$4}'| awk '{print$1}' #查看當前CPU空閒率,(-b-n 1 表示只須要1次的輸出結果) 8 9 date -d "$ (awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H: %M: %S" #顯示上次系統重啓時間,等同於upt ime; second ago爲顯示多少秒前的時間,+"%F %H: %M:%S"等同於+"*Y-%m-%d %H:%M:%S"的時間格式 10 11 awk 'BEGIN {n=0 ; while ("w" | getline) n++ ; {print n-2}}' #調用w命令,並用來統計在線用戶數 12 13 awk 'BEGIN {"hostname" | getline ; {print $0}}' #調用hostname, 並輸出當前的主機名
1 CPU使用率 2 3 cpu_us=`top -b -n 1 | grep Cpu | awk '{print $2}'` 4 cpu_sy=`top -b -n 1 | grep Cpu | awk -F ',' '{print $2}' | awk '{print $1}'` 5 cpu_sum=$(($cpu_us+$cpu_sy)) 6 echo $cpu_sum
1 seq 10 | awk '{getline; print $0}' 2 seq 10 | awk '{print $0; getline}'
注:seq 用於生成從一個數到另外一個數之間的全部整數工具
1 echo "A B C D" | awk '{OFS="|";print $0;$1=$1;print $0}' 2 ABCD 3 AIBICID 4 $1=$1是用來激活$0的從新賦值,也就是說字段$1...和字段數NF的改變會促使awk從新計算$0的值,一般是在改變OFS後而須要輸出$0時這樣作
1 awk '{ip[$1]++}END{for(i in ip) {print ip[i],i}}' /var/log/httpd/access_log | sort -r 2 3 備註:定義數組,數組名稱爲ip,數字的下標爲日誌文件的第1列(也就是客戶端的IP地址),++的目的在於對客戶端進行統計計數,客戶端. 4 IP出現一次計數器就加1。END中的指令在讀取完文件後執行,經過循環將全部統計信息輸出,for 循環遍歷的是數組名ip的下標
1 uptime, free -m,df -h, ifconfig ens33, rpm -qa|wc -l, /etc/passwd, who,ps aux, /var/log/secure
1 awk 'BEGIN {ip[$11]=0}; /Failed password/ {ip[$11]++};END {for(i in ip){print i,ip[i]}}' /var/log/secure
1 #!/bin/bash 2 3 us=`top -b -n 1 | grep Cpu | awk '{print $2}'` 4 echo "用戶佔用率爲:" $us 5 sy=`top -b -n 1 | grep Cpu | awk -F "," '{print $2}' | awk '{print $1}'` 6 echo "內核佔用率爲:" $sy 7 id=`top -b -n 1 | grep Cpu | awk -F ',' '{print $4}'| awk '{print $1}'` 8 echo "cpu空閒率爲:" $id