面试题答案
一键面试脚本内容
#!/bin/bash
# 使用awk逐行处理日志文件,统计每种日志级别的出现次数
awk '{count[$2]++} END {for (level in count) {print level, count[level]}}' big_log.log
优化思路
- 逐行处理:使用
awk
逐行读取日志文件,而不是一次性将整个大文件读入内存,避免内存溢出。在awk
中,{count[$2]++}
语句在每读取一行时,会提取该行的第二个字段(日志级别)并将其对应的计数器加1 。 - 简洁高效:整个脚本逻辑简单直接,没有复杂的中间数据结构或操作,减少了不必要的计算和内存开销。
END
块在文件读取完毕后遍历计数器数组,输出每种日志级别的统计结果。
注:这里没有使用sed
,因为awk
本身在文本统计和处理上更擅长,使用sed
反而会增加复杂度,不利于性能优化。如果非要使用sed
,可先通过sed
进行一些预处理(如简单过滤不需要的行等,但对于此需求并不必要),但这样会增加额外的处理步骤和性能开销。