码迷,mamicode.com
首页 > 其他好文 > 详细

【awk】个人用到的方法记录

时间:2015-06-08 19:52:42      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:awk

awk博大精深,本人除了简单的用法,其他的在工作中尚未深入研究。

另,附上几个blog的文章,后续可能会更新这个列表:

  1. Linux awk命令详解http://blog.chinaunix.net/uid-25120309-id-3801250.html

  2. http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html


【AWK】
去掉空格:
awk ‘{ result=gensub(/ /,"",1);print result }‘

打印某一段内容:
awk ‘{print $7}‘ access.log

统计IP数量:
awk ‘{cs[$1]+=1} END {for(c in cs) print cs[c], c}‘ access.log |sort -nr

打印最后一列:
awk ‘{print $8 " " $NF} ‘ access.log

统计大小:
awk ‘{print $10 "  " $1 "  " $7}‘ access.log|awk ‘{B+=$1} END {print B/1024/1024 " MB"}‘

统计TCP状态:
netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}‘

统计日志中http状态码
zcat 2013-07-15-0000-2330_cs.ecqun.com.*|awk ‘{print $9}‘|sort|uniq -c|sort -nr|more

统计日志格式最后一行是源站IP的对应数据
zcat 2013-07-15-*|awk ‘$7~/cs.ecqun.com/{print $NF}‘|sort|uniq -c|sort -nr|head

统计日志中18点访问cs.ecqun.com,状态码为200的数据,打印响应时间和源站地址
zcat 2013-07-15-18*|grep cs.ecqun.com|awk ‘$9=="200"{print $(NF-7),$NF}‘|sort|uniq -c|sort -nr|more

统计延时超过100ms的请求
zcat 2013-07-15-18*|grep cs.ecqun.com|awk ‘$9=="0"&&$(NF-7)>100 {print $(NF-7)}‘|sort|uniq -c|sort -nr|more

NR:整个脚本当前已经读过的记录数,就是行号,从1开始。随着所读文件的数目,一直累加。
FNR:同NR,不过是相对于当前在读的文件记录数。每开始读一个文件时,从1开始累加,相当于行号。读完一个文件后就会清0,新的文件又会从1开始。
http://in.sdo.com/?p=1054

统计http code为502的数量,IP
假设有以下文件:
cs.502 : 统计了出现502的次数和IP,格式为“次数  IP”
cs.502.ip : 从cs.502中筛选出IP,格式为“IP”
cs.502.country : 利用qqwry做IP到地理位置的转换,格式为“IP  地理位置”
现在的需求是,把cs.502和cs.502.country合并

awk ‘NR==FNR {a[$2]=$0;next} NR>FNR {print a[$1] " "$2}‘ cs.502 cs.502.country >cs.502.log

计算http code 海外相对全部的占比是多少
test.all 的内容是:
46255 0
967 504
218 502

test.oversea 的内容是:
1171 0
408 504
205 502

awk ‘NR==FNR {a[$2]=$1;next} NR>FNR {printf "%.2f% ", $1/a[$2]*100;print $2}‘ test.all test.oversea 
2.53% 0
42.19% 504
94.04% 502

计算百分比:
echo 55 4001638 |awk ‘{printf "%.4f%\n",$1/$2*100}‘

根据后3位来排序:
1231234214329049203
4239049230492039402
3209402394023940234
awk ‘{print $0,substr($0,length($0)-2,3)}‘ x.txt |sort -n -k 2 | awk ‘{print $1}‘
sed -r ‘s/(.*)((.){3})/\1|\2/‘ test.txt |sort -n -k 2 -t \| |sed ‘s/|//g‘


去重 
awk ‘!a[$1]++‘ test.log


【awk】个人用到的方法记录

标签:awk

原文地址:http://nosmoking.blog.51cto.com/3263888/1659704

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!