动作:用花括号括起来的语句,默认动作是{print 0当前整行$1, $2第1、2列(默认按空白分割)NF当前行的字段数NR当前行号(所有文件累加)FNR当前文件内的行号FS字段分隔符(默认空白)OFS输出字段分隔符(默认空格)RS记录分隔符(默认换行)ORS输出记录分隔符
3. 常用模式与动作
awk
# 选择行
NR==10 # 第10行
$1 == "root" # 第1列等于root
$3 > 100 # 第3列大于100
/error/ # 包含error的行
/ # 第2列匹配数字
# 动作语句
print 2)
sum+=1, 1, 1, 3 > 50' scores.txt
# 显示包含"404"的行
awk '/404/' access.log
# 第2列匹配"failed"
awk '$2 ~ /failed/' log
# 组合条件:第1列是"admin"且第3列>100
awk '$1=="admin" && 0}' file
# 计算某列的总和与平均值
awk '{sum+=9]++} END {for(code in count) print code, count[code]}' access.log✅ 格式化输出
bash
# 左对齐,宽度10
awk '{printf "%-10s %-8s\n", $1, $2}'
# 生成HTML表格片段
awk 'BEGIN{print "<table>"} {print "<tr><td>"$1"</td><td>"$2"</td></tr>"} END{print "</table>"}' data✅ BEGIN与END块
bash
# 在处理前打印标题,结束后打印总记录数
awk 'BEGIN{print "Name,Score"} {print} END{print "Total lines:", NR}' file
# 设置字段分隔符(可用-F选项或BEGIN中设置)
awk 'BEGIN{FS=","} {print 1, 1, 1, //' | xargs -I {} mv {}.txt {}_new.txt5. 复杂数据处理流水线
bash
# 从CSV中找出销售额大于1000的销售员,按销售额排序
cat sales.csv | awk -F',' '2","$3}' | sort -t',' -k2 -nr | sed 's/,/ -> /'
总结
| 命令 | 核心思想 | 最佳适用场景 |
|---|
| grep | 搜索 | 快速查找匹配行、文件过滤、正则检索 |
| sed | 编辑 | 批量替换、删除插入行、非交互修改 |
| awk | 格式化 | 列处理、数据统计、报表生成 |
学习建议:
先掌握grep的基本搜索和正则。
再学sed的替换、删除、打印,理解地址范围。
最后深入awk,把它当作一门迷你脚本语言来用,掌握数组、循环和格式化。
记忆口诀:
希望本文能帮助你彻底掌握这三个强大的Linux命令。如果你有任何疑问或更好的案例,欢迎在评论区交流讨论!
📌 本文首发于CSDN,请勿抄袭。欢迎转载,请注明出处。