Linux awk统计日志中出现过的IP(或出现次数最多的N个IP)

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk的用法

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:运行BEGIN{ commands }语句块中的语句。

第二步:从文件或标准输入(stdin)读取一行。然后运行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行反复这个过程。直到文件所有被读取完成。

第三步:当读至输入流末尾时,运行END{ commands }语句块。

BEGIN语句块在awk開始从输入流中读取行之前被运行,这是一个可选的语句块,比方变量初始化、打印输出表格的表头等语句通常能够写在BEGIN语句块中。

END语句块在awk从输入流中读取全然部的行之后即被运行。比方打印全部行的分析结果这类信息汇总都是在END语句块中完毕,它也是一个可选语句块。

pattern语句块中的通用命令是最重要的部分,它也是可选的。假设没有提供pattern语句块,则默认运行{ print },即打印每个读取到的行。awk读取的每一行都会运行该语句块。

这三个部分缺少任何一部分都可以。

可用awk来统计固定格式日志里的一些数据,如日志中出现过所有不同的IP

awk ‘{i=$1;count[i]++}END{for(i in count)print(i,count[i])}’ /var/log/httpd/access_log

awk对文件进行流处理,每次读取一行。$1就是IP,count[i]++是将IP作为一个数组的下标,并且使得统计这个IP所对应的数组元素自增1.END后面的语句是打印结果,只执行一次。

也可以用来找出访问次数最多的ip。

awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i], i);}' 日志文件 | sort -n | tail -n 10 #用tail显示最后10行

首先用awk统计出来一个列表,然后用sort进行排序,最后用tail取最后的10个。

以上参数可以略作修改显示更多的数据,比如将tail加上-n参数等,另外日志格式不同命令也可能需要稍作修改。

 

当前WEB服务器中联接次数最多的ip地址

netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -nr

查看日志中访问次数最多的前10个IP

cat access_log |cut -d ' ' -f 1 | sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 | less

查看日志中出现100次以上的IP

cat access_log |cut -d ' ' -f 1 | sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr | less

查看最近访问量最高的文件

cat access_log | tail -10000 | awk '{print $7}' | sort | uniq -c | sort -nr | less

查看日志中访问超过100次的页面

cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

统计某url,一天的访问次数

cat access_log | grep '12/Aug/2009' | grep '/images/index/e1.gif' | wc | awk '{print $1}'

前五天的访问次数最多的网页

cat access_log | awk '{print $7}' | uniq -c | sort -n -r | head -20

从日志里查看该ip在干嘛

cat access_log | grep 218.66.36.119 | awk '{print $1"\t"$7}' | sort | uniq -c | sort -nr | less

列出传输时间超过 30 秒的文件

cat access_log | awk '($NF > 30){print $7}' | sort -n | uniq -c | sort -nr | head -20

列出最最耗时的页面(超过60秒的)

cat access_log | awk '($NF > 60 && $7~/\.php/){print $7}' | sort -n | uniq -c | sort -nr | head -100

 

  • 10
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用awk命令统计IP出现次数,具体命令如下: ``` awk '{print $1}' 文件名 | sort | uniq -c ``` 其,$1表示每行的第一个字段,即IP地址;sort命令是用于排序的;uniq -c命令是用于统计每个IP地址出现次数。执行该命令后,会输出每个IP地址出现次数。 ### 回答2: awk是一种文本处理工具,可以在使用时利用其功能进行IP出现次数统计。在Linux操作系统,我们可以通过以下步骤来实现awk统计IP出现次数: 1. 通过grep命令搜索IP地址,并将结果输出至文本文件: grep -E -o "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log > ip.txt 其,access.log为需要统计日志文件,-E表示使用扩展正则表达式进行搜索,-o表示只输出匹配到的内容,用正则表达式匹配IP地址并将结果输出至ip.txt文件。 2. 使用awk命令进行IP出现次数统计awk '{ipcount[$1]++} END {for (x in ipcount) {printf "%-20s %s\n", x, ipcount[x]}}' ip.txt 其,'{ipcount[$1]++}'表示把每个IP地址都存储在ipcount数组,并对每个IP地址的出现次数进行加1操作;'END'表示在读取完整个文件后执行的操作;'{for (x in ipcount)}'表示遍历ipcount数组的所有IP地址;'printf "%-20s %s\n", x, ipcount[x]'表示输出每个IP地址和其出现次数,其%-20s表示占用20个字符位置,以左对齐的方式输出IP地址,%s表示输出IP地址对应的次数。 通过以上两个步骤,我们就可以利用awk命令对IP地址进行出现次数统计。此外,我们还可以通过其他的工具和命令来实现同样的功能。但是,awk命令提供了简单易用的语法,让我们能够快速完成对IP地址出现次数统计,适用于多种情况下的文本处理需求。 ### 回答3: awk是一种非常有用的文本处理工具,可以用来对文件进行各种各样的操作。在统计一个文件出现次数较多的数据时,awk是一个非常好用的工具。本文将详细介绍如何使用awk统计ip出现次数awk的简介 awk是一种用于文本处理的编程语言,它可以查找、处理并修改文本文件的行和列。使用awk时,它会依次处理输入文件的每一行,根据用户指定的匹配条件,进行相应的操作,最后输出结果。 统计ip地址出现次数的方法 在统计ip地址出现次数时,我们需要将文件ip地址提取出来,然后按照出现次数进行统计。下面是使用awk进行ip地址统计的步骤: 1、打开终端,切换到目标文件所在的目录下。 2、使用以下命令来统计ip地址出现次数awk '{print $1}' filename | sort | uniq -c 3、其,上述命令,filename是要统计的文件名,$1表示输出每一行的第一个单词,也就是ip地址。使用sort命令进行排序,然后使用uniq命令统计每个ip地址出现次数。 4、最后输出的结果将会列出每个ip地址以及它出现次数。 使用awk统计ip地址出现次数是一种非常简单的方法,不需要进行复杂的处理。只需要几行命令就可以轻松地解决这个问题。因此,如果您需要对一个文件ip地址出现次数进行统计,不妨试试上述方法看看能不能帮助您解决问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值