shell脚本中的一句话求解释
发布网友
发布时间:2024-10-01 09:18
我来回答
共1个回答
热心网友
时间:2024-10-27 20:17
这是用了awk数组
-F'-'
设置 - 为字段分隔符
++S[$1"-"$2]
awk数组下标并非一定要是整数。这句是在处理文件每一行时,将每行的第一个字段$1和第二个字段$2以 $1-$2 的字符串形式作为数组下标。这句主要用于统计文件中出现$1和$2相同的情况,出现一次相同情况,对应数组元素的值就加1。
if(S[a]>3) {sub(/-.*$/,"",a) print a}
出现三次以上,用字符串处理函数sub对数组下标a做替换操作。将匹配到的内容,即将字符串a中- 以及后面的内容都替换为空,只保留前面的 $1。
/-.*$/是个正则表达式,匹配含有-的所有字符,$表示字符串的结尾,.*表示中间含有任意字符(可以为空)。
最后,总结:
遍历/tmp/ipt/bad.log文件,对前两个字段(以-分隔)相同且出现三次以上的记录,打印其第一个字段(估计就是想要的bad IP),将所有打印出来的内容排序并去重后导入/tmp/ipt/bad.ip。