awk命令进阶操作(三)

awk数组

变量

变量:一个变量只能存储一个值

  • name=kk
  • age=999

数组

数组:一组相同数据类型的集合
userList = [‘tom’,‘jerry’,‘gkd’,‘wuo’]
三个概念
1.数组名
2.数组的索引
3.数组的索引对应的值

定义数组

数组名[索引]=值

如何定义数组

userlist[1]=tom
userlist[2]=gkd
userlist[3]=aaa
userlist[4]=999

数组索引

  • 数字,数字索引的变号是从0开始
  • 字母
  • 字符串

简单数组索引案例

awk 'BEGIN{stu[0]="tom";stu[1]="jerry";stu[2]="jack";print
stu[1]}'
jerry

数组的循环遍历

格式:for(变量 in 数组名)
变量中存储的是属组的索引

案例:分析/var/log/secure日志,显示用户从哪些IP登录系统,并对ip出现次数进行排序

awk -F "(from |port )" '/Accepted password/{ip[$2]+=1}END{for(var
in ip)print var, ip[var]}' log1.txt | sort -t " " -k2 -r -n

简单解释这个命令
这条命令的目的是从名为log1.txt的文件中读取数据,使用awk工具根据指定的分隔符"(from |port )"对每一行进行处理。具体来说,它会查找包含"Accepted password"的行,并统计每个IP地址出现的次数。最后,通过sort命令按照第二列(即计数)进行降序排序并输出结果

1.wak -F "(from|port)" 这行命令设置了输入字段的分隔符为"(from |port )". 这意味着awk会将每一行按照"(from |port )"来分割,以便于后续处理
2.''/Accepted password/{ip [$2]+=1}这部分是awk的处理逻辑,当匹配到"Accepted password"时,它会检查这一行的第二个字段$2,并将其作为键(key)来增加一个计数器(ip[$2]++)如果这个键不存在,则创建一个新的计数器并赋值为1
3.END{for (var in ip)print var,ip[var]}在所有行处理完毕后,这段代码会遍历所有的计数器(ip),打印出每个IP地址及其对应的出现次数
4.| sort -t " " -k2 -r -n:这条管道操作将awk的输出作为输入传递给sort命令。-t " "指定了字段分隔符为空格,-k2表示按照第二列排序,-r表示降序排序,-n表示数值排序

sort命令的高级选项有哪些

-b, --ignore-leading-blanks:忽略每行前面开始出的空格符号
-d, --dictionary-order:排序时,处理英文字母、数字及空格
-f, --ignore-case:忽略字母大小写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值