【Linux】 awk 命令

基础详解

官方文档 https://www.runoob.com/linux/linux-comm-awk.html

awk工具,主要将一行分成“字段”来处理,字段指的是以空格分开的,它可能不只一个字符。

awk '条件类型1{动作1} 条件类型2{动作2}...‘ filename

awk主要是处理每一行的字段内的数据,而默认的字段的分隔符为空格键或[tab]键

例如现在有以下文本b

使用

awk '{ print $1 "\t" $3}'  b

可以看到它把每一行的第一个和第三个字段都打印了,无论它的长度是多少

 

变量$0代表一整行数据的意思

如果我们把上面的$1换成$0会发生什么呢

awk '{ print $0 "\t" $3}'  b

可以看到首先是把b文本全部打印了一遍 然后再打印了第三列

awk是以行尾一次处理的单位,而以字段尾最小的处理单位

变量NF 代表每一行($0)拥有的字段总数

变量NR 代表目前awk所处理的是“第几行”数据

变量FS 代表目前的分割字符,默认是空格键

last -n 4 | awk '{print $1 "\t lines: " NR "\t columes: " NF}'  在awk内的NR,NF等变量要大写,且不需要 $ 啦。

 

例题

1.1.统计TCP的连接数量,其中LISTEN多少个,ESTABLISHED多少个。
[root@heiniao ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.251:12000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1013 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.251:22 192.168.1.17:3321 ESTABLISHED
tcp 0 248 192.168.1.251:22 192.168.1.17:62916 ESTABLISHED
tcp 0 0 192.168.1.251:22 192.168.1.17:62903 TIME_WAIT
tcp 0 0 :::22 :::* LISTEN

指令

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

这里netstat -ant是查看下当前的网络连接状态    | 的意思是用前一段指令的输出作为输入到下一段指令 ^tcp表示以tcp为开头的行才统计,//为正则匹配

解释:在这句awk语句里面,STATE就是我们建立的数组的名称,它的下标非常独特,它可以是LISTEN,如STATE[$NF]====>STATE[LISTEN],而STATE[$NF]++======>1,每次读一行+1最后就统计出来了LISTEN有多少个,而最后for(S in STATE)中的S就代表的是LISTEN和ESTABLISHED,而STATE[S]代表的就是一共多少次,所以最后显示出来的结果如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值