awk使用笔记

此文档主要记录各种实际工作中awk的一些应用,方便以后类似功能的应用,随时增加新的案例。


一。如何用awk同时处理多个文件:


      awk 'NR == FNR { b=FNR;    b用来记录第一个文件的记录条数,操作第一个文件的数据   } NR == ( FNR + b ){ c = FNR;    c用来记录第一个文件的记录条数,操作第二个文件的数据    }   NR == ( FNR + b + c ){     操作第三个文件数据    }' data1.txt data2.txt data3.txt


按照此方法,理论上来说,可处理n多个有关联字段的文件,之前按照此方法处理千万级数据文件,耗费时间大概30分钟左右,而php文件处理同样工作,大概耗时两个半小时左右。



二。awk统计文件中关键词数量,并排序:


awk '{a[$3]++}END{for(i in a){print i,a[i] | "sort -r -n -k2"}}' keyword.txt > test.txt


红字部分是关键词所在的列,如果每列分隔符不是“ ”,请注意先设置分隔符,先统计每个关键词个数,完后再通过管道进行排序。



三。awk封请求过多ip,for ddos attack


netstat -an | grep ":80" | grep -v "127.0.0.1" | grep -v "192.168"| awk '$5 ~ /[0-9]+:[0-9]+/{split($5,b,":");a[b[1]]++;}END{for(i in a){if(a[i] > 500) system("iptables -I INPUT -s "i" -j DROP");}}'


红字部分是需要过滤的ip请求数界限,比如当前代码作用是,将请求数超过500的ip进行封杀,试用时请小心,我就不小心把自己公司ip给封了,结果当时就连不上服务器了,所以最好其实是再 “grep -v '自己公司ip'” 一下





你可能感兴趣的:(awk,实例)