【问题标题】:Get awk result greater than X获取大于 X 的 awk 结果
【发布时间】:2017-07-06 09:43:37
【问题描述】:

命令:

grep "redirect=on" access_log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -3

输出是:

34  3.247.44.149
6   5.218.131.185
3   7.173.135.94

问题:如何仅在NR大于10的情况下输出。在这种情况下:

34  3.247.44.149

我已经尝试过使用 $1 > 10 但 $1 是 IP 而不是数字。

谢谢。

【问题讨论】:

  • 发布您想要处理的数据而不是已经聚合的输出怎么样?
  • grep "redirect=on" access_log
  • 发布来自access_log 的片段,比如说前10 行。发布head access_log输出
  • 我认为 access_log 看起来总是一样的:3.247.44.149 - - [06/Jul/2017:11:56:24 +0200] "GET /myurl.html?redirect=on HTTP/1.0" 200 21917 "myreferer.html" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0"
  • awk '{if ($0 >= 10){print $1}}'?

标签: linux bash sorting awk


【解决方案1】:

awk

awk -F'[[:space:]]+|?' '$8=="redirect=on"{ a[$1]++ }
     END{ for(ip in a) if(a[ip] > 10) print a[ip],ip }' access_log
  • -F'[[:space:]]+|?' - 字段分隔符

  • $8=="redirect=on" - 只考虑带有查询参数"redirect=on"的记录

  • a[$1]++ - 计算相同 IP 地址的出现次数

【讨论】:

  • 就像一个魅力。非常感谢 Roman - 非常聪明的解决方案 :)
  • @labu77,不客气(我已经添加了一些解释)
猜你喜欢
  • 2014-07-17
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
相关资源
最近更新 更多