征服Linux 2017-03-22
查询文本内容
示例文本
1.001 08:07:49 192.168.1.1 timeout fore webserver/server01 200 120
2.002 08:07:49 192.168.1.1 timeout fo webserver/server01 200 230
3.003 08:38:49 192.168.1.1 timeout for webserver/server02 404 340
4.004 08:49:49 192.168.1.5 timeout for webserver/server02 503 450
5.005 09:01:49 192.168.1.9 timexxx for webserver/server02 504 560
截取
1.cat t.log |awk '{print $(NF-1)}' #默认空格为分隔符,截取倒数第二个字段
2.cat t.log |awk -F' |/' '{print $7}' #空格或者/作为分隔符截取
3.cat t.log |awk 'BEGIN{FS=" |/"}{print $7}' #同上
4.cat t.log |awk -F"webserver/" '{print $2}' #关键字作为分割符截取
匹配&比较
1.cat t.log |awk '{if ($5 ~ /for/) print $0}' #包含 1,3,4,5
2.cat t.log |awk '{if ($5 !~ /for/) print $0}' #不包含 2
3.cat t.log |awk '{if ($5 = "for") print $0}' #替换(显示)
4.cat t.log |awk '{if ($5 == "for") print $0}' #等于 3,4,5
5.cat t.log |awk '{if ($5 != "for") print $0}' #不等于 1,2
6.cat t.log |awk '{if ($2 ~ /08:0[0-9]/) print }' #正则匹配,第二字段时间为8:00-8:09 1,2
7.cat t.log |awk '{if ($7==200 && $NF<150) print }' #并且,第七字段等于200并且最后一字段小于150 1
8.cat t.log |awk '{if ($7==503||$7==504) print}' #或者,第列等于503或者是504 4,5
9.cat t.log|awk '!a[$3]++' #去重,第三列为key去重 1,4,5
运算&统计
1.cat t.log |awk 'BEGIN{sum=0}{sum+=$8}END{print sum}' #求和,第六列求和 1700
2.cat t.log |awk 'BEGIN{sum=0;num=0}{sum+=$8;num+=1}END{print "avg:" sum/num}' #求平均值,求列平均值 340
3.cat t.log |awk '{ii[$3]++}END{for (i in ii){print ii[i],i}}' #统计次数,统计第三字段为key出现次数
4.cat t.log |awk '{s+=gsub(/timeout/,"&")}END{print s,"timeout"}' #统计次数,统计关键字timeout字符串出现次数 4 timeout
5.
1.#判断,正则,统计,数组
2.#$11不为三位数字,然后统计出现次数
3.cat ha.log-20150322 |awk --posix '
4.{if ($11 !~ /[[:digit:]]{3}/) ii[$11]++}
5.END{for (i in ii) print ii[i],i}
6.'