awk

本文深入讲解了awk命令的使用方法,包括格式化文本、处理数据库表样式的文本、使用正则表达式、内置变量及函数等内容,是学习awk命令的强大指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用

awk 适合处理 类似于数据库表的文本 对文本进行格式化;

以行为单位,对符合条件的行进行相应的处理

-----------------------------------------------------------------------------------

格式

awk [options] 'Pattern1 {Action1} Pattern2 {Action2}' Filename1, Filename2

格式说明:

[options]:

awk命令的选项,包括:-F指定输入分隔符,例如-F:   -v设定变量的值(通常用于设定输出字段分隔符)

--posix 或者 --re-interval:正则表达式中使用{m,n}时需要加上

Pattern:

模式,条件,包括空模式(不写条件,所有行全都匹配),BEGIN模式,END模式关系运算模式正则模式行范围模式

Action:

对符合条件的行所进行的处理动作

--------------------------------------------------------------------------------------------------

内置变量

FS输入字段分隔符,默认为空白字符

OFS输出字段分隔符,默认为空白字符

NF当前行的字段数

NR当前行的行号

FNR各文件分别计数的行号

FILENAME当前文件名

$0整行

$1第一个字段

$NF最后一个字段

$(NF-1)倒数第二个字段

例1:[root@localhost ~]# awk -F: -v OFS="\t" '{print $1,$(NF-1)}' /etc/passwd

------------------------------------------------------------------------------------------------------

BEGIN模式

该模式的Action指定了,在处理文件第一行之前需要先执行的动作,通常用于制作表头

END模式

该模式的Action指定了,在处理完文件的最后一行之后需要执行的动作,通常用于制作表尾

---------------------------------------------------------------------------------------------------------------

关于输出分割符

[root@localhost ~]# awk -F: -v OFS="\t" '{print $1,$NF}' /etc/passwd

[root@localhost ~]# awk -F: -v OFS="\t" '{print $1 $NF}' /etc/passwd

[root@localhost ~]# awk -F: -v OFS="\t" '{print $1  "#" $NF}' /etc/passwd

字段之前有逗号,时字段之间以输出分割符隔开显示;

字段之间为空格时,两个字段连在一起显示;

也可以在字段之间自定义用来分割输出的内容。

-------------------------------------------------------------------------------------------------------------

print printf 

print 会输出换行符

printf 不会输出换行符,可以对文本进行格式化输出

例2:[root@localhost ~]# awk -F: '{printf "%-20s\t%-20s\n" , $1,$NF}' /etc/passwd

----------------------------------------------------------------------------------------------------------------

关系运算模式

包括 < <= == != > >=

~ 与对应的正则表达式匹配

!~与对应的正则表达式不匹配

例3:[root@localhost ~]# awk -F: '$1=="root" {printf "%-20s\t%-20s\n" , $1,$NF}' /etc/passwd
-----------------------------------------------------------------------------------------------------------------------------

正则模式

格式 /正则表达式/不要引号,用到/时需要转义即\/

单独写/正则表达式/即没有出现~时,表示$0~/正则表达式/

例4

[root@localhost ~]# awk -F: '/^root/ {printf "%-20s\t%-20s\n" , $1,$NF}' /etc/passwd

等价于

[root@localhost ~]# awk -F: '$0~/^root/ {printf "%-20s\t%-20s\n" , $1,$NF}' /etc/passwd

awk中使用的正则表达式属于扩展正则表达式

使用{m,n}时需要加上 --posix 或者 --re-interval

-------------------------------------------------------------------------------------------------

行范围模式

格式: awk '/正则表达式1/,/正则表达式2/ {Action}' FileName

对第一次匹配到正则表达式1的行和第一次匹配到正则表达式2的行(这两行包括)之间的行执行Action

------------------------------------------------------------------------------------------------------------

Action

Action中可以类似于C语言那样使用 if else for while等,

特有的next:结束对当前行的处理,直接处理下一行

还可以使用内置函数

---------------------------------------------------------------------------------------------------------------

内置函数

先srand 后rand 产生随机数

int取整

gsub sub 字符替换

gsub("l","L","$1")第一个字段中的l替换为L

sub("l","L","$1")第一个字段中的第一个l替换为L

第三个参数省略时默认为$0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值