简介

AWK是一个强大的文本处理和数据分析工具,它可以处理数据、生成格式化报告,支持复杂的数据操作和计算。本指南将帮助您掌握AWK的各种用法,从基础文本处理到高级数据分析。

主要特点:
  • 强大的文本分析能力
  • 支持复杂的数学运算
  • 内置多种函数
  • 可以处理结构化数据
  • 支持自定义函数和数组

基础用法

基本语法

awk 'pattern { action }' input-file

内置变量

变量 说明 示例
$0 当前行的全部内容 awk '{print $0}' file.txt
$1, $2... 当前行的第n个字段 awk '{print $1}' file.txt
NR 当前行号 awk '{print NR, $0}' file.txt
NF 当前行的字段数 awk '{print NF}' file.txt

基本操作

打印特定列:

awk '{print $1, $3}' file.txt

使用自定义分隔符:

awk -F: '{print $1}' /etc/passwd

条件过滤:

awk '$3 > 100 {print $0}' data.txt

高级特性

BEGIN和END块

awk 'BEGIN {print "开始处理..."} {sum += $1} END {print "总和:", sum}' data.txt

数组使用

统计词频:

awk '{count[$1]++} END {for (word in count) print word, count[word]}' file.txt

正则表达式

匹配特定模式:

awk '/pattern/ {print $0}' file.txt

替换文本:

awk '{gsub(/old/, "new"); print}' file.txt

内置函数

字符串函数

函数 说明 示例
length() 计算字符串长度 awk '{print length($0)}' file.txt
substr() 提取子字符串 awk '{print substr($1,1,3)}' file.txt
split() 分割字符串到数组 awk '{split($0,arr,":")}' file.txt

数学函数

基本计算:

awk '{print int($1), sqrt($2), sin($3)}' data.txt

实用案例

日志分析

统计HTTP状态码:

awk '{status[$9]++} END {for (code in status) print code, status[code]}' access.log

计算响应时间平均值:

awk '{sum+=$NF; count++} END {print "平均响应时间:", sum/count}' access.log

系统监控

内存使用分析:

ps aux | awk '{sum+=$4} END {print "总内存使用率:", sum"%"}'

磁盘使用统计:

df -h | awk 'NR>1 {print $5, $6}'

数据处理

CSV文件处理:

awk -F, '{sum[$1]+=$2} END {for (item in sum) print item, sum[item]}' data.csv

最佳实践

性能优化

优化建议:
  • 使用合适的分隔符
  • 避免不必要的正则表达式
  • 处理大文件时使用管道
  • 合理使用数组和缓存

代码可维护性

注意事项:
  • 使用有意义的变量名
  • 添加适当的注释
  • 复杂逻辑使用函数封装
  • 保持代码结构清晰

实用脚本模板

通用数据处理模板:

awk ' BEGIN { FS=","; # 设置分隔符 print "开始处理..."; } NR>1 { # 跳过标题行 # 数据处理逻辑 sum[$1] += $2; } END { # 输出结果 for (key in sum) { printf "%s: %.2f\n", key, sum[key]; } }' data.csv