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可用性非常强,具体可以查找官网学习。

 

posted @   lms21  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示