您好我在编写脚本方面是一个新手,并且正在尝试弄清楚如何在Web日志文件中读取前10个I.P地址。我知道它需要循环每一行并计算,直到那里的数字为前10名。我只是不知道如何去做。
如果有人有一个值得赞赏的想法,那就去找我吧。
可能会有成千上万行,这里有几个样本。
121.45.49.36 - - [26/Feb/2013:09:07:21 +1100] "GET /jpg4/dsc1222s.jpg HTTP/1.1" 200 9335 121.45.49.36 - - [26/Feb/2013:09:07:21 +1100] "GET /jpg4/dsc1217s.jpg HTTP/1.1" 200 9540 121.45.49.36 - - [26/Feb/2013:09:07:22 +1100] "GET /jpg4/dsc3369s.jpg HTTP/1.1" 200 11938 121.45.49.36 - - [26/Feb/2013:09:07:22 +1100] "GET /jpg4/dsc1294s.jpg HTTP/1.1" 200 11184
答案 0 :(得分:1)
这将打印IP地址及其出现次数。
awk 'END{for(i in a)print i,a[i]}{a[$1]++}' file
没有正确阅读问题,前十名使用
awk 'END{for(i in a)print a[i],i }{a[$1]++}' test | sort -rn | head -10
答案 1 :(得分:1)
假设您要选择出现在文件中任何位置的顶级IP地址,您可以使用这一个内容:
grep -oE '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b' file | sort | uniq -c | sort -nr | head -10'
答案 2 :(得分:0)
假设IP总是在最左侧:
cut -f1 -d ' ' | sed "/.*[a-zA-Z].*/d" | sort | uniq
cut
仅保留每行的左侧值。sed
删除所有带字符的行(如果是域名)。sort | uniq
删除重复的IP。答案 3 :(得分:0)
以下是我在Awk中的表现:
awk '$1 ~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ {
n++
if(n<=10)
print $1
else
exit
}' log
将打印第一列中找到的前10个IP地址。