liunx的awk命令

来源:互联网 发布:java中逻辑或 编辑:程序博客网 时间:2024/05/21 09:39

liunx中文本处理的三大利器:awk、sed、grep虽然有简单的使用过,但对其具体的概念和操作一直很模糊,我准备从网上和鸟哥的linux私房菜中总结一些具体的概念,今天先写一下awk。

awk是linux中一个非常棒的文本处理工具,适合进行小型的数据处理。

awk的基本运行模式如下:


awk既可以处理后续接的文件又可以处理来自前个命令的standart output,相对于sed常常用于对一整个行进行处理,awk倾向于一行当中分成数个“栏位”进行处理,默认的“栏位”分隔符为空格键或者tab键。

例如:我先用last取出5个登录者的数据:

然后我们用awk对这些数据进行处理:我向要取出登录者的帐号与IP地址和登录时间,并用空格键隔开


$0表示整个行,$1表示第一个栏位,$2表示第二个栏位以此类推。

awk处理数据的流程为:

1、读入第一行,并将第一行的数据填入$0,$1,$2....中

2、依据条件类型的限制,判断是否要进行后面的动作

3、执行完所有的动作与条件类型

4、如果还有后续的行,就重复1,2,3步动作,直到所有的数据处理完成

所以awk一次处理的是一行数据,而处理的最小单位为一个栏位。

awk中的内建变量:NF:每一行($0)拥有的栏位总数;NR:目前awk处理的是第几行数据;FS:目前的分割字节,默认为空白键

awk逻辑判断:<,>,<=,>=,==,!=,赋值直接用=


实际操作:

处理/etc/passwd中的数据,要求以“:”为分隔符,当UID小于10时 ,输出帐号和UID

可以看到除了第一行,都按格式进行了输出,这是因为在处理第一行数据时还是以空白键为分割符的,虽然定义了FS=“:”,但是直到处理第二行时才生效。

如果想要使第一行就有效,可以使用BEGIN关键字预处理awk中的变量:


awk的几个注意事项:所有的awk动作,即'{ }'中的动作,如果有需要多个命令辅助时,可以用分号间隔,或者使用enter键分割

awk中变量不需要“$”