AWK是一种强大的文本处理工具,特别适合处理结构化的日志文件。以下是使用AWK处理日志文件的常用方法和技巧:
awk 'pattern {action}' logfile
# 提取第1列和第4列
awk '{print $1, $4}' access.log
# 使用特定分隔符(如逗号)
awk -F',' '{print $2}' data.csv
# 只显示包含"ERROR"的行
awk '/ERROR/' app.log
# 显示不包含"DEBUG"的行
awk '!/DEBUG/' app.log
# 基于列值过滤(如状态码为500的请求)
awk '$9 == 500' access.log
# 统计行数
awk 'END {print NR}' logfile
# 计算某一列的总和(如第5列是响应时间)
awk '{sum+=$5} END {print sum}' access.log
# 计算平均值
awk '{sum+=$5} END {print sum/NR}' access.log
# 分组统计(如按状态码分组计数)
awk '{count[$9]++} END {for(code in count) print code, count[code]}' access.log
# 假设第4列是时间戳[10/Oct/2023:13:55:36]
awk '$4 >= "[10/Oct/2023:13:00:00" && $4 <= "[10/Oct/2023:14:00:00"]' access.log
# 格式化输出
awk '{printf "IP: %-15s - Status: %s\n", $1, $9}' access.log
awk 'BEGIN {print "Start processing"} /pattern/ {count++} END {print "Found", count, "matches"}' logfile
awk '{total+=$5; count++} END {avg=total/count; print "Average:", avg}' data.log
awk '{print FILENAME, $0}' *.log # 处理多个文件并显示文件名
# 匹配IP地址
awk '$1 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/' logfile
# 统计访问最多的10个IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
# 统计不同HTTP方法的请求数
awk '{print $6}' access.log | cut -d'"' -f2 | sort | uniq -c
# 统计每小时请求量
awk '{split($4, a, ":"); print a[2]":00"}' access.log | sort | uniq -c
# 计算CSV文件中第3列大于100的行
awk -F',' '$3 > 100' data.csv
# 计算CSV文件第2列的总和
awk -F',' '{sum+=$2} END {print sum}' data.csv
AWK功能非常强大,以上只是基础用法。对于更复杂的日志分析,可以结合其他Unix工具如grep、sed、sort等一起使用。