所以我试图浏览HTTP错误日志,取出结果中的所有IP然后对它们进行排序,以便按照匹配总数的顺序显示它们(忽略任何'单一匹配),以便我知道要阻止哪些IP。
到目前为止我的命令:
grep "File does not exist" local1.log | awk '{print $13;}' | sort -g | uniq -c | sort -n -k 1,1
我的命令输出:
5599 200.71.211.187]
6439 91.102.160.191]
10448 84.92.84.166]
14181 27.159.226.198]
20170 93.90.177.167]
现在我有一种感觉,我做了太多的穿透和某种对uniq / sort的混淆使用......
我以前的尝试是:
grep "File does not exist" local1.log | awk '{print $13;}' | uniq -dc | sort -n -k 1,1
这给了我uniq的重复输出,然后按总计'匹配'排序。来自排序。
TL; DR:
必须有一个更好的方式来完成我想要做的事情,任何建议? ^^
编辑-sort -u给我一个IP垃圾列表,其中包含单个匹配项:
1 99.92.71.147]
1 99.92.86.7]
1 99.93.12.115]
1 99.9.4.241]
1 99.95.215.81]
1 99.95.96.7]
1 99.99.113.194]
1 99.99.185.1]
答案 0 :(得分:2)
试试这个:
awk '/File does not exist/{count[$13]++}END{for(ip in count) print count[ip],ip}' local1.log
我们在这里做的是创建一个存储ip地址作为密钥的数组并继续递增它。在END
块中,我们遍历数组并打印我们看到ip和ip本身的次数。
您可能需要对此进行管道排序以按计数排序输出。