awk
1.awk语法格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | awk [options] 'commands' filename awk [options] -f awk-script-file filenames BEGIN行处理前动作 {}行处理 END行处理后动作 BEGIN{print 1/2} {print "ok" } END{print "Over" } 如: awk 'BEGIN{print 1/2} {print "ok"} END{print "Over"; print "Over2"}' /etc/passwd 匹配 awk 'pattern' filename awk '/root/' /etc/passwd 处理动作 awk '{action}' filename awk -F: '{print $1}' /etc/passwd 匹配+处理动作 awk 'pattern {action}' filename awk 'BEGIN{FS=":"} /root/ {print $1,$3}' /etc/passwd 加判断语句 df | awk '/\boot/ {if ($2 < 300000) {print "1"} else {print "2"}}' |
2. awk的工作原理
awk将文件中的每一行作为输入,awk会将每一行赋给内部变量$0,以换行符结束
awk开始进行字段分解,每个字段存储在已编号的变量中,从$1开始【默认空格分割】
awk默认字段分隔符是由内部FS变量来确定,可以使用-F修改
awk行处理时使用了print函数打印分割后的字段
awk在打印后的字段加上空格,因为$1,$3之间有一个逗号,逗号被映射至OFS内部变量中,称为输出分隔符,OFS默认为空格
awk输出后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分割成字段并进行处理,该过程将持续到所有行处理完毕。
3.awk分隔符
指定分隔符,一个冒号为分隔符 awk -F ":" '{print $1}' tmp 指定多个分隔符,一个冒号或一个空格为分隔符 awk -F "[: ]" '{print $2}' tmp 一个或多个冒号,空格为分隔符 awk -F "[: ]+" '{print $2}' tmp eg 取ip ifconfig | awk -F "[ :]+" '/\<inet\>/{print $4}'
OFS 指定输出时,逗号映射的内容,默认为空格
awk -F ":+" 'BEGIN{OFS="-----"}{print $1,$2,$3}' /etc/passwd
4. awk内置变量
一行多少个元素 NF awk '{print NF}' tmp awk '{print $NF}' tmp awk '{print $(NF-1)}' tmp
NR 行号 awk '{print NR}' tmp awk 'NR==1{print $0}' tmp awk 'NR!=1{print $0}' tmp
awk 'NR>=1&&NR<=5{print $0}' tmp
FNR 也是行号,当处理多个文件时,文件分开计数
awk '{print FNR}' tmp1 tmp2
5.模式匹配
正则 ~符号表示匹配,后面加正则,正则内容使用‘/’包括 awk '/^root/' tmp awk '$0 ~ /^root/' tmp awk ‘$1~/^root/’ tmp 比较符 awk '$1 == /bin/bash' tmp awk '$1 < 10' tmp 条件表达式 awk '{if ($1 < 1000) {print "1"} else {print "2"}}' tmp 运算 awk '$1*1000 > 2000' tmp awk '{print $1+100}' tmp 逻辑运算 awk '$1<100 && $2 >2000' tmp
6. if
awk '{if ($1<100) {i++} else if ($2>200) {j++} else if ($3>100) {k++} else {n++}} END{print "i="i,"j="j,"k="k,"n="n}' tmp.log
7.while
awk 'BEGIN{i = 1; while(i<=10){print i; i++}}' tmp
8.for
awk -F: '{for (i = 1; i< 10; i++) {print $0}}' passwd
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?