我正在尝试从 Apache access.log 文件中获取最近 5000 个点击中的前 10 个 IP。
我已经尝试过这个单行:
tail -5000 example_access.log |awk '{print $1}'|sort |uniq -c|sort -rn |head -10
我从中得到的是:
1465 128.74.162.38
1154 194.63.141.238
820 176.31.30.184
235 217.164.16.157
1413 54.38.137.26
但它没有按预期工作,因为如果我删除头 -5 并将其替换为 less,我就可以看到整个列表,并且我有这一行 “422 80.120.179.134” (应该采用这个的位置“235 217.164.16.157”)。
我正在使用这个文件:http://www.almhuette-raith.at/apache-log/access.log。
有人知道我做错了什么吗?
谢谢你!
AFAIU 你的问题是,你需要获取重复数字更大的前 10 个 IP,那么以下内容可能会帮助你。
awk '{a[$1]++} END{for(i in a){print i,a[i]}}' Input_file| sort -nrk2.1 | head -10
编辑:因为OP想要检查最后5000行并获取前10个IP的最高计数。
tail -5000 Input_file | awk '{a[$1]++} END{for(i in a){print i,a[i]}}' | sort -nrk2.1 | head -10
cat access.log | grep '- -' | grep '- -' | awk '{print $1}' |排序| uniq-c|排序-nr |头-n 10
输出