AWK 是一种强大的文本处理工具,常用在 Unix/Linux 环境中处理和分析结构化数据。以下是 AWK 的常用命令和功能,简要总结:
基本语法
1 | awk [选项] '模式 {动作}' 文件 |
- 模式:指定匹配条件(如正则表达式或逻辑条件)。
- 动作:对匹配的行执行的操作(如打印、计算)。
- 文件:输入文件,若无文件,可从标准输入读取。
常用选项
-F
:指定字段分隔符(默认是空格或制表符)。1
awk -F: '{print $1}' /etc/passwd # 以冒号分隔,打印第一列
-v
:定义变量。1
awk -v var=5 '{print $1 * var}' file.txt # 使用变量 var
常用内置变量
FS
:输入字段分隔符(默认空格)。OFS
:输出字段分隔符(默认空格)。NR
:当前处理的记录(行)号。NF
:当前行的字段数。$0
:整行内容。$n
:第 n 个字段(从 1 开始)。
常用命令和模式
打印整行或特定字段
1
2awk '{print $0}' file.txt # 打印整行
awk '{print $1, $3}' file.txt # 打印第 1 和第 3 字段条件匹配
1
2awk '/pattern/ {print $0}' file.txt # 打印包含 pattern 的行
awk '$1 == "value" {print $2}' file.txt # 第一字段为 value 时打印第二字段指定行号
1
2awk 'NR==5 {print $0}' file.txt # 打印第 5 行
awk 'NR>=2 && NR<=5 {print $0}' file.txt # 打印第 2 到第 5 行统计行数或字段
1
2awk 'END {print NR}' file.txt # 统计总行数
awk '{print NF}' file.txt # 每行字段数计算(求和、平均值等)
1
2awk '{sum += $1} END {print sum}' file.txt # 计算第一列总和
awk '{sum += $1; count++} END {print sum/count}' file.txt # 计算第一列平均值格式化输出
1
awk '{printf "%-10s %s\n", $1, $2}' file.txt # 格式化输出第 1、2 字段
处理多文件
1
awk '{print FILENAME, $0}' file1.txt file2.txt # 打印文件名和内容
BEGIN 和 END 块
BEGIN
:在处理文件前执行。END
:在处理文件后执行。1
awk 'BEGIN {print "Start"} {print $1} END {print "End"}' file.txt
常用示例
提取日志中特定列
1
awk -F' ' '{print $1, $3}' access.log # 提取日志第 1 和第 3 列
统计文件中某值出现次数
1
awk '$1 == "error" {count++} END {print count}' log.txt # 统计 error 出现次数
替换字段
1
awk '{sub("old", "new", $1); print $0}' file.txt # 将第一字段中的 old 替换为 new
处理 CSV 文件
1
awk -F',' '{print $1, $2}' data.csv # 处理逗号分隔的 CSV 文件
注意事项
- AWK 脚本可以保存为文件,使用
-f
选项调用:1
awk -f script.awk file.txt
- AWK 支持正则表达式、循环、条件语句,适合复杂数据处理。
- 对于大数据量,AWK 比 sed 或 grep 更高效,尤其在字段操作上。
如果需要更详细的 AWK 教程或特定用例,请告诉我!