码迷,mamicode.com
首页 > 系统相关 > 详细

Linux文本处理三剑客——awk详细用法

时间:2019-05-05 20:40:27      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:相同   应用   查看   指定   uid   大文件   定义变量   符号   变量   

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息。
awk处理过程: 依次对每一行进行处理,然后输出 。

awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔

awk的特殊符号:
$0:表示整个当前行
$1:每行第一个字段
NF:字段数量变量
NR:每行的记录号,多文件记录递增
FNR:与NR类似,不过多文件记录不递增,每个文件都从1开始
FS:BEGIN时定义分隔符(相当于-F)
RS:输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~:匹配,与==相比不是精确比较
!~:不匹配,不精确比较
==:等于,必须全部相等,精确比较
!=:不等于,精确比较
+:匹配时表示1个或1个以上
OFS:输出字段分隔符, 默认也是空格,可以改为制表符等
ORS:输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕

print:是awk打印指定内容的主要命令(标准化输出)
printf:格式化输出

下面举几个例子,能更便于理解!!!
1、
技术图片
这里是通过awk把/etc/passwd 中的用户名拿到,其中 ‘{}‘ 是固定格式。
-F: 是选定以:作为分隔符,如果是以空格作为分隔符,则直接默认不用写。

2、
技术图片
这个例子则是把/etc/passwd下的gid和uid拿出来。printf是格式化输出,默认不会换行,而其中的“\n”和“\t”则是换行及有一个table键的距离。

3、
技术图片
这个例子中NR是指行号,但$NR是默认每一行的结尾的那个字符段。$0是匹配的整行。

4、
技术图片
这是BEGIN以及END的格式及应用,其中的{FS=":"}和-F:是相同的。后面打印的this are usernames,在最后一行打印。

5、
技术图片
这是通过给X赋值的方式,来寻找/etc/fstab中的空行数。

6、
技术图片
这个例子是计算uid的总和

7、
技术图片
在awk中可以使用if判断和for循环,其中<(小于)、>(大于)、>=(大于等于)

8、
技术图片
是通过~进行匹配,只匹配以lpp或者root开头的行数

9、
技术图片
uid和gid的和如果大于二百输出

10、
技术图片
其中是查看空闲内存,并把以Kb为单位换算为Mb为单位。

Linux文本处理三剑客——awk详细用法

标签:相同   应用   查看   指定   uid   大文件   定义变量   符号   变量   

原文地址:https://blog.51cto.com/14239093/2389448

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!