awk 与shell 查看ip连接数

2012年9月29日 发表评论 阅读评论

在现网应用中,尤其是web服务器上经常会遇到需要查看主机IP连接数的情况,而我常用的语句如下:

# 统计所有
netstat -an|awk '{if( $5 ~ /[1-255]/)print $5}' |awk -F: '{print $1}'|sort|uniq -c|sort -nr
# 只统计ESTABLISHED状态的
netstat -an|grep ESTAB|awk '{print $5}' |awk -F: '{print $1}'|sort|uniq -c|sort -nr

今天网上看到了另一个使用awk处理的脚本,号称速度更快。具体脚本如下:

# awk 'BEGIN{
    while("netstat -an"|getline){
        if( $5 ~ /[1-255]/)
        {
            split($5,t1,":");
            tarr[t1[1]]++;
        }
    }
    for(k in tarr)
        {
            print k,tarr[k] | "sort -r -n -k2";
        }
};'

$5是netstat –an 第5个字段。默认就是对方连接ip以及端口。

不过在现网处理中,我分别使用上面我常用的语句和网上看到的语句通过time统计对比,并未发现比我使用的快。对比方法如下:

# time awk 'BEGIN{while("netstat -an"|getline){if( $5 ~ /[1-255]/){split($5,t1,":");tarr[t1[1]]++;}}for(k in tarr){print k,tarr[k] | "sort -r -n -k2";}};'
# time netstat -an|awk '{if( $5 ~ /[1-255]/)print $5}' |awk -F: '{print $1}'|sort|uniq -c|sort -nr

细想一下也是,awk内部也调用了系统命令sort 。所以理论上来说两者并无不同。不过awk使用的娴熟度倒倒得借鉴学习。这里也记录下吧。




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.