2017-11-10 181 views
0

这是一个我昨天张贴在回答了一个跟进的问题:AWK - 寻找基于4xx错误代码的顶部网址

awk - Find the top url based on error code

我用昨天的答案,抢夺刚404修改了它错误代码,现在抓住所有4xx。

awk '$3 ~ /^4/{a[$2]++}END{for(url in a){print a[url], url}}' samplelog.txt | sort -rn 

这个工作,但现在我想要一个更精细的输出。现在它将所有4xx分组在一起,例如403和404将被计为2,而不是唯一的。我希望能够统计所有4xx,但是通过它们独特的代码将它们分开。

示例日志:

GET /foo 404 
GET /foo 200 
GET /foo 404 
GET /foo 404 
GET /foo 400 
GET /foo 403 
GET /foo 403 
GET /bar 200 
GET /bar 400 
GET /foobar 404 
GET /foobar 200 
GET /foobar 404 
GET /foobar 403 

结果与当前脚本(同上)

awk '$3 ~ /^4/{a[$2]++}END{for(url in a){print a[url], url}}' samplelog.txt | sort -rn  

6 /foo 
3 /foobar 
1 /bar 

所需的结果

3 /foo 404 
2 /foo 403 
2 /foobar 404 
1 /foo 400 
1 /bar 400 
1 /foobar 403 

回答

0
$ awk '$3~/^4/{a[$2 FS $3]++} END{for(k in a) print a[k],k}' file | 
    sort -k1,1nr -k2,2 

3 /foo 404 
2 /foo 403 
2 /foobar 404 
1 /bar 400 
1 /foo 400 
1 /foobar 403 
+0

看起来这个工作。谢谢! –