MST
星途 面试题库

面试题:Bash脚本实现复杂日志统计

有一个包含网络请求日志的文件`network.log`,每行日志格式为`时间 源IP 目标IP 状态码`,如`2023 - 11 - 15 10:30:00 192.168.1.10 10.0.0.1 200`。编写一个Bash脚本,统计每种状态码出现的次数,并按照状态码从小到大的顺序输出结果,同时计算状态码不是200的请求占总请求数的比例,精确到小数点后两位。
27.2万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 统计每种状态码出现的次数
status_count=$(awk '{print $4}' network.log | sort | uniq -c | sort -n -k2)

# 输出每种状态码出现的次数
echo "状态码统计:"
echo "$status_count"

# 计算总请求数
total_requests=$(wc -l < network.log)

# 计算状态码不是200的请求数
non_200_requests=$(grep -v ' 200$' network.log | wc -l)

# 计算状态码不是200的请求占总请求数的比例
non_200_percentage=$(awk -v non_200=$non_200_requests -v total=$total_requests 'BEGIN {printf "%.2f%%\n", (non_200 / total) * 100}')

# 输出状态码不是200的请求占总请求数的比例
echo "状态码不是200的请求占比: $non_200_percentage"