shell awk 用法

awk是Linux中的一种强大的文本处理工具,用于对结构化文件进行数据的提取和处理。下面详细介绍一下awk命令的用法。

1. 基本格式
awk ‘pattern {action}’ filename
其中,pattern是用于匹配数据的模式,可以使用正则表达式;action是在匹配到模式时执行的操作,可以是打印、计算、修改等操作;filename是要处理的文件名。

2. 数据提取
使用awk命令可以方便地从文件中提取所需的数据。通过使用特定的字段分隔符,可以按列提取数据。
例如,打印文件中第一列的数据:
awk ‘{print $1}’ filename
打印文件中第一列和第二列的数据:
awk ‘{print $1, $2}’ filename

3. 数据过滤
可以使用awk命令对数据进行筛选,只打印满足条件的行。
例如,筛选出第二列等于某个值的行:
awk ‘$2 == value’ filename
筛选出某行中任意列的值满足条件的行:
awk ‘/pattern/’ filename

4. 数据计算
awk还支持对数据进行简单的计算操作,如求和、平均值等。
例如,计算某列的和:
awk ‘{sum += $1} END {print sum}’ filename
计算某列的平均值:
awk ‘{sum += $1} END {print sum/NR}’ filename
其中,NR表示行号,也即总行数。

5. 自定义处理
使用awk命令还可以进行自定义的数据处理,如添加新字段、修改字段值等。
例如,添加一列,显示行号:
awk ‘{print NR, $0}’ filename
修改某列的值:
awk ‘{if ($1 > 10) $1 = 10; print}’ filename

Linux系统中基于文本行处理的文本文件工具除了sed外还有AWK。而AWK比sed提供了更丰富的文本处理功能,不需要标明增删改也可输出满足需求的信息,除此之外还可以添加额外可执行的命令等,接下来我们详细介绍一下。

一、AWK命令的基本介绍

AWK 是一种处理文本文件的强大文本分析工具。它诞生于20世纪70年代末期,这也许是它影响了众多 Linux 用户的原因之一。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

二、AWK命令的工作原理

AWK是从文件中逐行读入(即文件的第一行到最后一行),查找匹配条件的目标文本行,如果模式匹配成功,则使用默认分隔符将一行内容分隔成各个部分并保存到内建变量中,然后按制定的指令执行命令。

三、AWK命令的基本格式

awk [选项] '脚本命令' 文件名

选项以及含义

常用内置变量

常见表达式

四、AWK命令的使用案例

操作文件展示

[admin@localhost ~]$ cat passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

案例1_常规操作解读

[admin@localhost ~]$ awk -F: '{print $1,$7}' passwd

bin /sbin/nologin

daemon /sbin/nologin

adm /sbin/nologin

解读:

1)AWK命令默认从文件中读入一行文本内容,并将其赋给内置变量$0。

2)通过使用-F指定的分隔符将读入的一行文本内容分解成字段,每个字段存储到已编号的变量中,从$1至$n。

3)通过print函数打印指定的字段列,这里打印字段1与字段7。

案例2_BEGIN与END

[admin@localhost ~]$ awk 'BEGIN{FS=":"; print "处理分隔符"FS"标识"}{print $0}END{print "共"NR"行,每行"NF"列"}' passwd

处理分隔符:标识

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

共3行,每行7列

解读:

1)AWK命令从文件中读取第一行文本内容之前先执行BEGIN后面的指令,且执行1次。

2)之后读取文本中的每一行并将其保存到$0变量中,进行输出打印。默认分隔符是空格或制表符,而这里在BEGIN中将分隔符设置成冒号。

3)当文本中的所有行都处理完之后,最后执行END后面的指令,且也执行1次。从上面的执行结果我们是可以看出这些效果的。

案例3_添加逻辑处理文本内容

1)定义脚本文件 aa

[admin@localhost ~]$ vim aa

BEGIN{FS=":"} \

{ \

print "--------处理第"NR"行--------"; \

for(i=0;i<=NF;i++){ \

if(i%2!=0){ \

print $i \

} \

} \

}

2)执行脚本命令,及展示执行效果

[admin@localhost ~]$ awk -f aa passwd

--------处理第1行--------

bin

1

bin

/sbin/nologin

--------处理第2行--------

daemon

2

daemon

/sbin/nologin

--------处理第3行--------

adm

3

adm

/sbin/nologin

解读:

1)AWK命令根据-f指定的外部aa脚本文件对passwd文件的每一行进行处理。

2)aa脚本通过BEGIN表达式重置了默认分隔符为冒号;然后对每一行使用冒号进行分隔成多个字段列,这里只对奇数列字段进行打印。

3)通过效果展示看出,每一行通过冒号分隔后变成7列,只打印出1、3、5、7列字段。

案例4_AWK指令中操作数组

[admin@localhost ~]$ awk 'BEGIN{args=0;FS=":"}{arr[args++]=$args}END{for(i=0;i<args;i++){print arr[i]}}' passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon

x

解读:

1)通过BEGIN重置分隔符为冒号,并预定义变量args=0。

2)将每一行分隔成字段,取出args对应的字段列并设置到数组arr中。

3)所有行处理完后,再执行END中的指令,即遍历打印数组中的内容。

特别说明一下,AWK中数组的下标被称为关键字key。值和关键字都存储在内部的一张key/value的hash表格中。数组和变量一样,都是在使用时自动创建的。通常AWK中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

五、总结

AWK是一种编程语言,用于在linux/unix下对文本和数据进行处理。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。AWK的数据可以来自标准输入、一个或多个文件,或其它命令的输出。AWK可以在命令行中使用,但更多是作为脚本来使用。AWK如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早日实现财富自由-2025

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值