当前位置: 首页 > news >正文

awk案例练习

目录

一、awk练习

1.1筛选ip地址

1.2字段去重

1.3次数统计

 1.4统计TCP连接状态

 1.5处理字段缺失的数据

1.6筛选给定时间范围内的日志

一、awk练习

1.1筛选ip地址

ifconfig命令查看IP

 利用awk进行筛选

ifconfig  | awk 'BEGIN{RS=""}NR=2{print $6}'

RS指定输入记录换行符,当RS=""时,即输入换行符为\n,它指示AWK将连续的非空行组合成一个记录,这时就分为了三行,每一段一行,NR==2,代表第二行也就是第二段,$6代表第二行的以空格为间隔的第6个字段,也就是ip地址

1.2字段去重

 先随便创建个test练习,将下面内容写进去

2019-01-13_12:00_index?uid=123
2019-01-13_13:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710
2019-01-14_12:00_index?uid=123
2019-01-14_13:00_index?uid=123
2019-01-15_14:00_index?uid=333
2019-01-16_15:00_index?uid=9710

 利用awk命令进行去重

awk -F"?" '{arr[$2]++;if(arr[$2]=1){print $0}}'  test  

-F"?"代表以?为输入字段分隔符,arr[$2]即arr[uid=xxx],

当字段第一次出现时,arr[$2]为0,++后为1,触发if条件,输出$0;

当字段第二次及n次出现时,arr[$2]已经等于1了,++后为2,无法触发if条件,无法输出

这样就达到了去重的效果


1.3次数统计

 依旧随意创建文本test

status
status
mountd
mountd
mountd
mountd
mountd
mountd
k8s
k8s
k8s
nfs
k8s
nfs
nfs_acl
nfs
nginx
nginx
nginx
docker
docker
docker
nfs_acl
nlockmgr
nlockmgr
nlockmgr
nlockmgrstatus
status
mountd
mountd
mountd
mountd
mountd
mountd
k8s
k8s
k8s
nfs
k8s
nfs
nfs_acl
nfs
nginx
nginx
nginx
docker
docker
docker
nfs_acl
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgrr
nlockmgstatus

利用cat 与awk 统计出现的次数

当字段第一次出现时,arr[$0]=0,++后为1,当出现第二次时,arr[$0]=1,++后为2,所以当第n次出现时,arr[$0]=n

END表示最后的操作,for(i in arr){print arr[i], i}表示打印键值和键名,即第一行的4 nfs

cat test | awk '{arr[$0]++}END{for(i in arr){print arr[i],i}}'

 1.4统计TCP连接状态

先用netstat -lntp查看

 再用以下命令统计

netstat -lntp | awk 'NR>2{arr[$6]++}END{for(i in arr){print arr[i],i}}'

NR>2代表处理大于第二行的记录,arr[$6]++代表统计tcp连接状态的次数,最后打印出来


 1.5处理字段缺失的数据

在test中随意输入一些数据

ID  name    gender  age  email          phone
1   Bob     male    28   abc@qq.com     18023394012
2   Alice   female  24   def@gmail.com  18084925203
3   Tony    male    21                  17048792503
4   Kevin   male    21   bbb@189.com    17023929033
5   Alex    male    18   ccc@xyz.com    18185904230
6   Andy    female       ddd@139.com    18923902352
7   Jerry   female  25   exdsa@189.com  18785234906
8   Peter   male    20   bax@qq.com     17729348758
9   Steven          23   bc@sohu.com    15947893212
10  Bruce   female  27   bcbd@139.com   13942943905
awk '{print $6}' test

这里如果想打印电话,直接打印$6是不行的,因为有些记录是没有$6的,所以可以通过if条件,判断如果$5是以0-9开头的,那就打印$5,否则就打印$

 awk '{if($5 ~ /^[0-9]/){print $5}else{print $6}}' test

1.6筛选给定时间范围内的日志

随便找的之前的防火墙日志

 

是"-F-"以短横线为字段分隔符,使用if判断来输出一月份的日志

 awk -F- '{if($2<=1){print $0}}' test

 

http://www.lryc.cn/news/115183.html

相关文章:

  • Debian 12.1 正式发布
  • neo4j清空数据库
  • SpringBoot整合Mybatis-Plus
  • 在langchain中使用自定义example selector
  • pytest常用执行参数详解
  • 本地项目如何连接git远程仓库
  • 力扣 494. 目标和
  • Maven-搭建私有仓库
  • PostgreSql 参数配置
  • 【BMC】OpenBMC开发基础2:修改原有程序
  • 2012年数学建模竞赛脑卒中发病环境因素分析及干预日期数据处理代码
  • Merge和Rebase的区别
  • [RTKLIB]模糊度固定相关问题(二)
  • QtAV for ubuntu16.04
  • MFC 文件读写包括字符串的结构体
  • 在家构建您的迷你聊天Chat gpt
  • pytest自动化测试框架之断言
  • C++模板的用法
  • ESP 32 蓝牙虚拟键盘链接笔记本电脑的键值问题
  • 128.【Maven】
  • 嵌入式虚拟仿真实验教学平台之串口发送数据
  • Android Studio 屏幕适配
  • 【C++】C++11--- 线程库及详解lock_guard与unique_lock
  • 第二篇|研究数据哪里来——建筑业
  • numpy ascontiguousarra 学习笔记
  • 【算法|双指针系列No.1】leetcode283. 移动零
  • PHP8定义字符串的方法-PHP8知识详解
  • 分享21年电赛F题-智能送药小车-做题记录以及经验分享
  • 字符串统计-C语言/Java
  • Styled-components,另一种css in js的方案