005 awk命令
命令说明
awk 是面向记录的文本处理语言,默认按列(字段)处理文本,擅长统计、格式化输出和列提取,常与 grep、sed 并称文本处理三剑客。
语法
awk [选项] 'BEGIN{...} /模式/{ 动作 } END{...}' [文件]...常用参数
| 参数 | 说明 |
|---|---|
| -F 'sep' | 指定输入字段分隔符,如 -F: 按冒号分列 |
| -v var=value | 给 awk 传入变量 |
| 内置变量 | $0 整行、$1 第1列、NF 列数、NR 行号、OFS 输出分隔符 |
使用示例
$ awk '{print $1, $3}' access.log输出每行第 1 列和第 3 列
$ awk -F: '{print $1}' /etc/passwd以冒号为分隔符提取用户名
$ awk '{print $NF}' file.txt输出每行最后一列
$ awk 'NR==2,NR==5' file.txt
输出第 2 到第 5 行
$ awk '$3 > 100 {print $1, $3}' data.txt输出第 3 列大于 100 的行
$ awk '{sum+=$1} END{print sum}' nums.txt对第 1 列求和
$ awk 'END{print NR}' file.txt统计文件总行数(wc -l 的 awk 写法)
$ ps aux | awk '$3>80 {print $2, $11}'找出 CPU 占用超过 80% 的进程
$ awk -F: '$7!~/nologin|false/ {print $1, $7}' /etc/passwd列出可登录用户及其 shell
实用技巧
- BEGIN 块在处理第一行前执行(常用于打印表头),END 块在全部行处理完后执行(常用于汇总)。
- 去重并保持顺序:awk "!seen[$0]++" file。
- 修改列输出格式:awk -F, 'BEGIN{OFS="|"}{print $1,$2}' 可把逗号分隔转为竖线分隔。
- awk 适合按列统计,sed 适合替换,grep 适合查找;复杂文本处理优先考虑 awk。