统计本机所有tcp连接的状态

Q:netstat -n|awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'
这都什么啊,我一句都读不懂,哪位细心又高才的大大帮忙解释解释,感激不尽

统计TCP连接的几种状态的数量.

A:看不懂很正常,但是别灰心泄气.

首先 ^ 是开头的意思,就是说开头是TCP字样的,$NF表示最后一个字段,把它放入数组S中,然后自加,awk是采用的关联数组,个中奥秘我也说不清楚,倒不出来.自己慢慢体会吧.END最后用for取出数组中的下标,也就是TCP的几种状态,然后对应该下标的值,就是统计的数量.

说明:在shell中,不存在关联数组或者说像python中"字典"那样的非数字下标的数组,因为你定义一个S[a]=1,S[b]=2,如果你改变S[a]的值,那么S[b]的值也相应改变(亲自试验过)。而在awk中貌似存在例外,关联数组好像可以存在,例如上边这个例子,不然整个语句说不通。

而且,不管是关联数组还是数字下标的普通数组,其在定义时没有被赋值,或为空值,若进行自加,自减运算,那么其当做0值对待,但其本身不等于0值。

如:declare -a S[0]=""

     let ++S[0]

     echo "${S[0]}"  # 显示结果为1

posted @ 2014-09-14 17:06  调皮的猫  阅读(320)  评论(0编辑  收藏  举报