linux - awk - 根据 4xx 错误代码查找顶部 url

标签 linux awk cat

这是我昨天发布的已回答的后续问题:

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

最佳答案

$ 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

关于linux - awk - 根据 4xx 错误代码查找顶部 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230280/

相关文章:

linux - 许多进程的缓存锁定?

linux - 如果列包含数字,则插入文本

bash - 适用于 awk v4.0.2 但不适用于 >= 4.2.1 的 awk 表达式

c++ - 如何运行外部程序?

c++ - 如何使用 ld 创建共享库?

linux - bash 中 ./name.sh 旁边的变量

bash - 如何只选择我的 AWK 脚本中的前 10 行

Bash 错误 CSS 文件

linux - 如何在 Linux 上向后读取文件?