linux awk命令
语法:
awk 'pattern{action}'
awk上下文变量
开始BEGIN 结束END
行数 NR
字段与字段数$1 $2...
整行$0
字段分隔符FS
输出数据的字段分隔符 OFS
记录分隔符 RS
输出字段的行分隔符 ORS
字段变量用法
-F 制定字段分隔符
BEGIN{FS="_"}也可以表示分隔符
$0代表当前记录
$1代表第一个字段
$N代表第n个字段
$NF 代表最后一个字段
$(NF-1) 代表倒数第二个字段
pattern表达式
正则匹配$1 ~/pattern/
比较表达式 $2 > 2
awk pattern 匹配表达式案例
开始和结束 awk 'BEGIN{}END{}'
正则匹配
整行匹配 awk ‘/sunning/'
字段匹配 awk '$2 ~/xxx/'
行数表达式
取第二行awk 'NR==2'
去掉第一行awk 'NR>1'
区间选择
awk '/aa/, /bb/'
--> 打印从匹配到aa的行开始,到匹配到bb的行结束
awk '/1/, NR==2'
--> 打印从匹配到1的行开始,到第二行结束
action行为表达式
打印 {print $0}
赋值{$1 = 'abc'}
处理函数
原始内容 $0
更新后内容{$1=$1;print $0}
例子:
原始数据:
a:b:c
1111111111
222aa
root 192.168.1.1
manshuo@Dashuo:~/tem
--> 以 . 为分隔符,单行变多行
cat demo_awk.txt | awk 'BEGIN{RS="."}{print $0}'
#以RS分隔符来划分,然后输出为多行
a:b:c
1111111111
222aa
root 192
168
1
1
-->多行变单行
cat demo_awk.txt | awk 'BEGIN{ORS=" "}{print $0}'
#ORS为组合后分隔符
a:b:c 1111111111 222aa root 192.168.1.1
计算平均数
把每一列的第二个数字相加并最后除以行数求平均数
echo
'1,10
2,20
3,30' |awk 'BEGIN{total = 0;FS=","}{total+=$2}END{print total/NR}'
20
awk的词典结构array
数组array:
'a,1,10
a,2,10
a,3,20
b,1,3
b,2,3
b,3,4'
awk可用性非常强,具体可以查找官网学习。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报