加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

awk技巧总结

发布时间:2020-12-14 02:03:03 所属栏目:Linux 来源:网络整理
导读:1,指定多分隔符 实例: 提取文件名和大小,展示为"test.sql.gz 100M" # du -sh /bkup/dayback/test.sql.gz100M /bkup/dayback/test.sql.gz 命令如下: # du -sh /bkup/dayback/test.sql.gz | awk -F ‘[/ ]+‘ ‘{print $NF," ",$1}‘test.sql.gz 100M 命令
1,指定多分隔符

实例: 提取文件名和大小,展示为"test.sql.gz 100M"

# du -sh /bkup/dayback/test.sql.gz
100M    /bkup/dayback/test.sql.gz

命令如下:

# du -sh /bkup/dayback/test.sql.gz | awk -F ‘[/ ]+‘ ‘{print $NF,"  ",$1}‘
test.sql.gz   100M

命令解析:

  • -F 指定分隔符
  • -F[/ ]+ 表示指定多个分隔符,这里指定/和空格(也可以是其他),+为正则表达式,表示+前面的字符(/或者空格)重复1次或者一次以上
  • $NF awk内置变量,表示最后一个字段的内容
  • NF awk内置变量,表示浏览记录字段的个数

更多:

# echo "1:::2:3 4 5 6" | awk -F[: ]+ ‘{print $4}‘
4

2,数组

实例:统计tcp连接状态

# netstat -an |grep ^tcp |  head -5
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN     
tcp        0      0 192.168.200.41:53       0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:53            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:25            0.0.0.0:*               LISTEN     

# netstat -an | awk ‘/^tcp/{++S[$NF]} END{for(a in S) print a,S[a]}‘
LAST_ACK 54
LISTEN 24
CLOSE_WAIT 70
ESTABLISHED 86
FIN_WAIT2 32
TIME_WAIT 984

命令解析:
awk中的数组本质上属于关联数组,也就说它的下标可以为字符串,在上述例子中,首先创建了一个数组S并且将该命令输出的最后一个字段作为下标(LAST_ACK,LISTEN,CLOSE_WAIT...),当执行到第一行时,我们引用的是S[‘LISTEN‘],很明显这个元素是不存在的,awk在元素不存在时,会自动创建该元素,并且将该元素的值设为0,因此经过计算后S[‘LISTEN‘]值会变为1,由于END模式中的语句会在最后执行,这里姑且先不考虑它,继续运行第二行,依旧是S[‘LISTEN‘],此时经过计算,它的值会变为2,以此类推,指导执行完最后一行结束,进入END模式的运行,通过一个for循环,打印出数组的下标和它的值,即为我们最终想要的结果。PS:awk在字符串,空字符串参与运算时,也会将其当做0来处理

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读