2.8 KiB
2.8 KiB
1、awk 概览
awk 是 Linux 中非常强大的文本分析工具,特别适合处理按列分隔的数据。
常见用途:
- 提取某几列字段
- 按条件筛选内容
- 统计求和
- 格式化输出
- 分析日志和表格类文本
2、工作流程
awk 的处理流程通常是:
- 先执行
BEGIN语句块 - 逐行读取输入
- 对每一行执行
pattern { action } - 最后执行
END语句块
基本格式:
awk 'BEGIN{action} pattern{action} END{action}' file
3、字段分隔符
3.1 -F
用于指定输入字段分隔符。
awk -F: '{print $1}' /etc/passwd
这里的 : 表示按冒号分列。
3.2 内置变量 FS
FS 表示输入字段分隔符,功能类似 -F。
awk 'BEGIN{FS=":"} {print $1}' /etc/passwd
4、常用变量
FS:输入字段分隔符OFS:输出字段分隔符NF:当前行字段数NR:当前处理到第几行$1、$2:第 1 列、第 2 列$0:整行内容
4.1 自定义变量
可以使用 -v 定义变量:
awk -v threshold=100 '$3 > threshold {print $0}' file.txt
5、常见动作
5.1 print
用于简单输出。
awk -F: '{print $1,$3}' /etc/passwd
- 逗号表示按输出分隔符拼接
- 字符串要用引号包裹
5.2 printf
用于格式化输出。
awk -F: '{printf "user=%s uid=%s\n", $1, $3}' /etc/passwd
常见格式符:
%s:字符串%d:整数%f:浮点数%e:科学计数法%c:字符%u:无符号整数
注意:printf 不会自动换行,通常要手动加 \n。
6、流程控制
awk 支持常见控制语句:
ifif ... elsewhileforbreakcontinueexit
6.1 条件筛选示例
awk -F: '$3 >= 1000 {print $1,$3}' /etc/passwd
表示打印 UID 大于等于 1000 的用户。
7、常见示例
7.1 提取第一列
awk '{print $1}' file.txt
7.2 打印行号和内容
awk '{print NR, $0}' file.txt
7.3 统计某列总和
awk '{sum += $1} END {print sum}' numbers.txt
7.4 格式化输出 /etc/passwd
awk -F: '{printf "user=%-15s uid=%s\n", $1, $3}' /etc/passwd
8、实战建议
- 按列处理文本时优先考虑
awk - 做简单列提取时,
cut更轻;做条件判断和计算时,awk更强 - 处理日志、表格、监控数据时,
awk非常高频 - 写复杂语句时,先从简单
print版本调试,再逐步增强
9、小结
awk是按行读、按列处理的强力文本工具-F、FS、NR、NF、$1、$0是最常见概念print适合简单输出,printf适合格式化输出- 它非常适合做日志分析、列提取和条件统计