awk基础-统计访问状态非200的前10个IP

统计日志中各IP访问非200状态码的次数

日志示例数据:

111.202.100.141 - - [2019-11-07T03:11:02+08:00] "GET /robots.txt HTTP/1.1" 301 169 

统计非200状态码的IP,并取次数最多的前10个IP。

# 法一
awk '
  $8!=200{a[$1]++}
  END{ for(i in a){print a[i],i} }
' access.log | sort -k1nr | head -n 10

# 法二:使用awk自身的排序功能
awk '
  $8!=200{arr[$1]++}
  END{
    PROCINFO["sorted_in"]="@val_num_desc";
    for(i in arr){
      if(cnt++==10){exit}
      print arr[i],i
    }
}' access.log