Sort / Uniq管道使用

时间:2014-04-19 19:32:09

标签: regex sorting awk grep uniq

所以我试图浏览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]

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本身的次数。

您可能需要对此进行管道排序以按计数排序输出。