shell腳本編輯6:awk過濾

awk數據過濾,統計(行,列):
逐行處理器

awk內植變量
$1,$2,$3..... 第n列
NF 當前行有多少列
NR 當前行號
awk打印常量(“常量必須要使用引號”打印多個以逗號隔開)

格式:
Awk 選項 ‘BEGIN{} 條件{} END{}‘ 文件

原則所有的指令必須放在 {}中

BEGIN{} 指令在讀取內容前執行1次

條件{} 指令在讀取文件中執行n次

END{} 指令在讀取文件後執行1次

簡式(3個指令必須有一個)
1:awk 選項 ‘條件{指令}’ 文件
2:命令 | awk 選項 ‘條件{指令}’
默認指令爲打印
默認條件匹配所有
print打印 ($1<打印第一列>$2........)

選項:
-F 指定分割符<默認是空格或tab鍵>

條件:
1:/正則/ (模糊匹配)
2:數字和字符的比較 (精確匹配)
3:支持邏輯&&且 ||或
4:運算(當計算器運算)(加減乘除不定義數值默認爲0)

5:支持分支結構循環結構
(if指令)
if (){}
if (){}else{}
if(){}else if (){}..

例:/etc/passwd下有多少普通用戶有多少系統用戶進行統計
awk -F: '{if ($3>=1000){x++}else{y++}} END{print " 普通用戶:"x, "系統用戶:"y}' /etc/passwd

while(){}循環:
詞頻
root hehe root
xixi root
ni hao ma root
awk '{i=1;while(i<=NF){if($i=="root"){x++};i++}} END{print x}' /a.txt

for (){}

tailf /var/log/httpd/access_log
ab -c 100 -n 10000 http://192.168.4.207/ (模擬100人訪問該IP10000次)

統計:
awk '{ip[$1]++} END{for (i in ip){print i,ip[i]}}' /var/log/httpd/access_log

awk '{ip[$1]++} END{}' /access_log

a=(11 22 33 44 55 66 77 88 99 00)
a[‘abc’]=11
a[‘tt’]=22
a[‘hh’]=33
...... (shuchu abc=11)
awk ‘$1~/root/{ }’ ...對第一列作模糊匹配查找

例:awk -F: ‘{print $1}’ /etc/passwd
awd ‘{print “nh” ,”nm”}’ /etc/passwd
awk '/^K/{print "nh", "nm"}' /data.txt/data.txt
awk -F: '{print "用戶是:",$1}' /etc/passwd

awk 'BEGIN{print "nihao"}' /data.txt/data.txt
awk '{print "nihao"}' /data.txt/data.txt
awk 'END{print "nihao"}' /data.txt/data.txt

awk -F: 'BEGIN{print "用戶名 UID 解釋器"} $1~/^root/{print$1,"\t"$4,"\t"$7 } END{print"總用戶量:"NR}' / etc/passwd

Awk -F: ‘$1~/root/{print $3}’ /etc/passwd

awk 'BEGIN{x=3;y=4;print x+y}'

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