博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
庖丁解牛获取连接状态数的awk数组命令
阅读量:5936 次
发布时间:2019-06-19

本文共 2098 字,大约阅读时间需要 6 分钟。

本博文为老男孩linu培训机构早期的培训教案,特分享以供大家学习参考。

全部系列分为五篇文章,本博文为第二篇:


获取连接状态数的awk命令

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

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

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

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local AddressForeign AddressState

tcp00 124.123.3.79:80219.85.194.23:12004SYN_RECV

tcp00 124.123.3.77:80183.8.74.57:3276SYN_RECV

tcp00 124.123.3.77:80124.236.0.214:63191SYN_RECV

tcp00 124.123.3.77:80221.237.233.41:2338TIME_WAIT

tcp01023 124.123.3.77:8061.178.184.222:62683FIN_WAIT1

tcp00 124.123.3.77:80222.79.242.74:7416TIME_WAIT

tcp04839 124.123.3.77:80121.31.42.148:30638FIN_WAIT1

tcp00 124.123.3.77:80183.10.154.60:37282TIME_WAIT

tcp01 124.123.3.77:8059.49.174.176:26913CLOSING

tcp00 124.123.3.77:80120.87.129.35:1787TIME_WAIT

tcp0174 124.123.3.77:80120.71.134.66:1165CLOSING

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

拆解awk命令

1)完整命令如下

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

2awk庖丁解牛

命令拆分

功能说明

/^tcp/

过滤出以tcp开头的行,“^”为正则表达式用法,以...开头,这里是过滤出以tcp开头的行。

S[]

定义了一个名叫S的数组,在awk中,数组下标通常从 1 开始,而不是 0

NF

当前记录里域个数,默认以空格分隔,如上所示的记录,NF域个数等于6

$NF

表示一行的最后一个域的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是SYN_RECVTIME_WAIT等。

S[$NF]

表示数组元素的值,如上所示的记录,就是S[TIME_WAIT]状态的连接数

++S[$NF]

表示把某个数加一,如上所示的记录,就是把S[TIME_WAIT]状态的连接数加一

END

for(key in S)

遍历S[]数组

print key,”\t”,S[key]

打印数组的键和值,中间用\t制表符分割,显示好一些。

3)举个小例子练手

已知test.txt内容:

001 name wodi12k

002 name yingsui 15k

003 name jeacen10k

004 name kuqi8k

005 name yideng10k

006 name xiaofan8k

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

[oldboy@test ~]$ cat test.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,不但不专业,而且内容多时,影响处理效率。

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

本系列博文完整内容共5篇:

第一篇:详解linux netstat输出的网络连接状态信息
第二篇:庖丁解牛获取连接状态数的awk数组命令
第三篇:awk数组命令经典生产实战应用拓展
第四篇:老男孩培训第八节课前awk考试题案例(门户面试题解答)
第五篇:linux生产服务器有关网络状态的优化措施(告一段落)

转载地址:http://geptx.baihongyu.com/

你可能感兴趣的文章
Spring MVC学习-------------訪问到静态的文件
查看>>
Unity应用架构设计(11)——一个网络层的构建
查看>>
运行自己的shell脚本
查看>>
C语言之基本算法26—佩尔方程求解
查看>>
jqMobi(App Framework)入门学习(一)
查看>>
委托的N种写法
查看>>
如何让linux加载当前目录的动态库
查看>>
如何查看dede版本信息
查看>>
基于SIP和RTP协议的开源VOIP之QuteCom简单介绍
查看>>
Leetcode--easy系列9
查看>>
.NET Core程序中使用User Secrets存储敏感数据
查看>>
freeradius 启动报错Refusing to start with libssl version OpenSSL 1.0.1
查看>>
python 操作redis之——有序集合(sorted set) (七)
查看>>
Python 爬虫实例(1)—— 爬取百度图片
查看>>
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key
查看>>
Linux环境变量设置中配置文件分析(/etc/profile,~/.bashrc等)(转)
查看>>
详解执行计划
查看>>
petri网
查看>>
删除节点
查看>>
Objective-C Classes Are also Objects
查看>>