awk
是 Linux 中强大的文本处理工具,擅长基于列的文本分析和处理。以下是 awk
的详细用法、示例,以及结合 grep
和 sed
的实际应用。
awk
命令详解awk '模式 {动作}' 文件名
模式:筛选条件(如正则、行号、列值比较)。
动作:对匹配的行执行的操作(如打印、计算)。
# 打印文件第1列和第3列(默认以空格/Tab分隔) awk '{print $1, $3}' file.txt # 打印第2列,并在行首添加行号 awk '{print NR, $2}' file.txt
NR
:当前行号。
$0
:整行内容,$1
、$2
等表示第1、2列。
# 处理以逗号分隔的 CSV 文件(如:name,age,city) awk -F',' '{print $2}' data.csv # 输出时用 "---" 连接列 awk -F',' '{OFS="---"; print $1, $3}' data.csv
-F','
:设置输入分隔符为逗号。
OFS
:设置输出分隔符。
# 打印第2列大于30的行 awk '$2 > 30 {print $0}' data.txt # 打印包含 "error" 的行 awk '/error/ {print}' log.txt # 打印第5行到第10行 awk 'NR>=5 && NR<=10 {print}' file.txt
# 计算第3列的总和 awk '{sum += $3} END {print "总和:", sum}' data.txt # 统计文件行数 awk 'END {print NR}' file.txt # 计算第2列的平均值 awk '{sum += $2; count++} END {print "平均值:", sum/count}' data.txt
# 将第2列的值乘以2后输出 awk '{$2 = $2 * 2; print}' data.txt # 在第1列前添加前缀 "ID:" awk '{$1 = "ID:" $1; print}' data.txt
grep
、sed
和 awk
)任务:处理日志文件 app.log
,要求:
提取所有包含 ERROR
的行,保存到 errors.log
。
将这些行中的时间格式从 2023-10-01
改为 01/10/2023
。
统计每个错误类型(如 ERROR: Disk Full
)的出现次数。
解答:
# 1. 提取 ERROR 行 grep "ERROR" app.log > errors.log # 2. 修改时间格式(假设时间在第1列) sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/' errors.log > errors_fixed.log # 3. 统计错误类型(假设错误信息在第4列后) awk -F':' '{err[$4]++} END {for (e in err) print e, "次数:", err[e]}' errors_fixed.log
任务:处理 sales.csv
文件(格式:产品名,单价,销量
):
删除所有空行和注释行(以 #
开头)。
将单价从美元 $10
格式改为纯数字 10
。
计算每个产品的总销售额(单价 × 销量),并输出总销售额最高的产品。
解答:
# 1. 删除空行和注释行 sed '/^#/d; /^$/d' sales.csv > cleaned.csv # 2. 移除单价中的 $ 符号 sed -i 's/\$//g' cleaned.csv # 3. 计算总销售额并找出最大值 awk -F',' '{total = $2 * $3; print $1, total; if (total > max) {max = total; product = $1}} END {print "最高销售额:", product, max}' cleaned.csv
任务:分析 ps aux
输出,要求:
过滤出当前用户(假设为 ubuntu
)的进程。
提取进程的 PID
、CPU%
和 命令
。
输出 CPU 使用率超过 5% 的进程,按 CPU% 降序排序。
解答:
# 1. 过滤用户进程,提取 PID、CPU%、命令(第2、3、11列) ps aux | grep "^ubuntu" | awk '{print $2, $3, $11}' > process.txt # 2. 筛选 CPU% > 5% 并按降序排序 awk '$2 > 5 {print}' process.txt | sort -k2 -nr
grep
:快速过滤文本行(如关键字、正则匹配)。
sed
:编辑文本(如替换、删除、插入)。
awk
:结构化处理列数据(如计算、统计、条件过滤)。
组合使用场景:
日志分析:grep
过滤关键行 → sed
清洗数据 → awk
统计。
数据报表:sed
删除无用行 → awk
计算并格式化输出。
系统监控:ps
/top
输出 → grep
筛选进程 → awk
提取指标。
掌握这三个工具的组合使用,可以高效解决日常文本处理任务!