awk数组命令

 

三、庖丁解牛获取连接状态数的命令

3.1 获取连接状态数的awk命令

 

netstat -n |awk'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

[root@node6 ~]# netstat-an| awk '/^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]}'

TIME_WAIT 2

ESTABLISHED 193

LISTEN 15

 

[root@node6 ~]# netstat-an | awk '/^tcp/ {print $5}'| sort | uniq -c | sort -rn | head -10

 

以上两条命令效果相同

 

 

提示:将netstat -n的结果通过管道符交给awk命令处理。

3.2先来执行下netstat -n

 

[oldboy@LVS-1-1~]$ netstat -n|more #截取部分有代表性的内容如下

 

Active Internetconnections (w/o servers)

 

Proto Recv-Q Send-QLocal AddressForeign AddressState

 

tcp00124.123.3.79:80219.85.194.23:12004SYN_RECV

 

tcp00124.123.3.77:80183.8.74.57:3276SYN_RECV

 

 

提示:实际执行这条命令的时候,可能会得到上万条类似的记录,我们只取若干来举例。

3.3拆解awk命令

 

1)完整命令如下

 

netstat -n |awk'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

 

3)举个小例子练手

 

已知test.txt内容:

 

001 name wodi12k

 

002 name yingsui 15k

 

003 name jeacen10k

 

004 name kuqi8k

 

005 name yideng10k

 

006 name xiaofan8k

 

要求:统计老男孩培训学生中,不同薪水的学生的数量报表。

 

[oldboy@test ~]$ cattest.txt |awk '/^00/ {++S[$NF]} END {for (a in S) print a,S[a]}'

 

15k 1

 

8k 2

 

10k 2

 

12k 1

 

提示:模拟前面的awk命令,过滤以00开头的行,然后进行处理。

 

上述awk数组元素内容:

 

key=12k S[12K]=1

 

key=15k S[15K]=1

 

key=10k S[10K]=2

 

key=8kS[8K]=2

 

[oldboy@test ~]$ awk'/^00/ {++S[$NF]} END {for (a in S) print a,S[a]}' test.txt

 

15k 1

 

8k 2

 

10k 2

 

12k 1

 

提示:awk可以直接处理文本,因此,不需要去cat,不但不专业,而且内容多时,影响处理效率。

 

本文未完待续。更多博文内容:

 

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS