awk基础内容总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk基础内容总结相关的知识,希望对你有一定的参考价值。
awk基础知识总结
一、awk介绍
awk是由Alfred Aho 、Peter Weinberger 和 Brian Kernighan这三个人姓氏的首个字母组成。linux系统所使用的awk其实是gawk,也就是GNU awk,简称为gawk。
awk其实还是一门编程语言,它支持变量、数组、条件判断、循环、函数等功能。从功能上说,它更适合对复杂的文本进行处理并格式化输出。
二、awk基本语法格式
awk [options] ‘program‘ file ...
其中program的格式语法:pattern {action statements;..}
- PATTERN:设定数据的匹配模式。
- ACTIONS:处理数据的动作,常见的有print、printf。
PATTERN或ACTIONS二者可省去其一,省去PATTERN时表示对所有行都执行ACTIONS,省略ACTIONS表示对符合条件的行执行print动作。
一个简单的例子:取出磁盘空间的使用率。
[[email protected] /tmp]#df | grep /dev/sd | awk ‘{print $1,$5}‘
/dev/sda2 16%
/dev/sda5 1%
/dev/sda1 16%
其中位置变量$1,$2...为该行的第几个字段,"$0"表示整行。而输出多个字段,字段之间使用逗号","分隔,如{print $1,$5}。输出时,仍默认以空格分隔各输出字段。
三、awk的变量
awk支持内置变量和自定义的变量,使用选项-v来定义变量。
- FS:输入字段分隔符,默认是空格和制表符。
- OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
- RS:输入记录的分隔符,即行分隔符,用于分割每一行,默认是换行符。
- ORS:输出记录的分隔符,输出时用指定的符号代替换行符,默认为换行符。
- NF:字段的数量
- NR:记录的行号
- FNR: 多个文件的行号、记录号的统计,分开统计。
- FILENAME:当前文件名
- ARGC:命令行参数的个数。
举例说明:
-
指定输入分隔符为:,而输出分隔符使用---,输出结果:
[[email protected] /tmp]#awk -v FS=":" -v OFS="---" ‘{print $1OFS$3}‘ /etc/passwd root---0 bin---1 daemon---2 adm---3 lp---4 ......
-
取出文本中的字段数量,注意NF的使用前面不需要加$符号。
[[email protected] /tmp]#awk -F: ‘{print NF}‘ /etc/passwd 7 7 ......
-
取出倒数第二个字段的内容,此变量需要前加$符号。
[[email protected] /tmp]#awk -F: ‘{print $(NF-1)}‘ /etc/passwd /root /bin /sbin /var/adm .....
-
使用FNR变量来处理多个文件,统计记录号。当读取第二个文件时,FNR是从0重新开始计数的,这点与NR不同。
[[email protected] /tmp]#awk ‘{print FNR}‘ /etc/issue /etc/inittab 1 2 3 1 2 3 ......
四、格式化输出
awk使用print和printf输出数据,格式化输出语句的命令格式为:
printf “FORMAT” , item1, item2, ...
(1) 必须指定FORMAT。
(2) 不会自动换行,需要显式给出换行控制符
。
(3) FORMAT中需要分别为后面每个item指定格式符。
格式符: 与后面的item要一一对应
%c:显示字符的ASCII码
%d, %i:显示十进制整数
%e, %E:显示科学计数法数值
%f:显示为浮点数
%g, %G:以科学计数法或浮点形式显示数值
%s:显示字符串
%u:无符号整数
%%:显示%自身
修饰符:
N:显示宽度;N为数值,宽度不足时若为左对齐则右边空格补足,若右对齐则左边空格补足。
-:左对齐,默认是右对齐。如%-15s。
+:显示数值正负号。
0:表示以0填充。
五、BGEIN和END
BEGIN和END是一个特殊的PATTERN,BEGIN引导的程序是在awk读取第一个文件第一行前要执行的awk程序,END引导的程序是在awk处理完最后一个文件最后一行后要执行的awk程序。
通常BEGIN用于输出一个类似的表格的标题,END则用于最后的总结性输出。所以awk完整一点的格式可由:BEGIN语句块、能够使用模式匹配的通用语句块、 END语句块,共3部分组成:
awk [options] ‘BEGIN{action;… }pattern{action;… }END{action;… }‘ file ...
六、总结
awk除了上述的基础功能外,还包括数组、流程控制语句如条件判断语句、while循环、for循环,函数功能,awk调用shell命令等进阶的内容,在此就不列举了。
以上是关于awk基础内容总结的主要内容,如果未能解决你的问题,请参考以下文章