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动作。
一个简单的例子:取出磁盘空间的使用率。
[root@centos7 /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:命令行参数的个数。
举例说明:
-
指定输入分隔符为:,而输出分隔符使用---,输出结果:
[root@centos7 /tmp]#awk -v FS=":" -v OFS="---" '{print $1OFS$3}' /etc/passwd root---0 bin---1 daemon---2 adm---3 lp---4 ......
-
取出文本中的字段数量,注意NF的使用前面不需要加$符号。
[root@centos7 /tmp]#awk -F: '{print NF}' /etc/passwd 7 7 ......
-
取出倒数第二个字段的内容,此变量需要前加$符号。
[root@centos7 /tmp]#awk -F: '{print $(NF-1)}' /etc/passwd /root /bin /sbin /var/adm .....
-
使用FNR变量来处理多个文件,统计记录号。当读取第二个文件时,FNR是从0重新开始计数的,这点与NR不同。
[root@centos7 /tmp]#awk '{print FNR}' /etc/issue /etc/inittab 1 2 3 1 2 3 ......
四、格式化输出
awk使用print和printf输出数据,格式化输出语句的命令格式为:
printf “FORMAT” , item1, item2, ...
(1) 必须指定FORMAT。
(2) 不会自动换行,需要显式给出换行控制符\n。
(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命令等进阶的内容,在此就不列举了。
- centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(十一)软件评测基础知识
- Android 技能总结,各种基础和进阶内容的资料收集
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(二)操作系统基础知识
- 区块链基础内容总结
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(一)计算机系统构成及硬件基础知识
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(三)数据库基础知识
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(十二)软件评测基础知识
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(四)中间件基础知识
- C#基础知识总结(不定时添加新内容)
- Django基础内容总结
- C#基础语法---运算符(6.25晚上学内容总结)
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(五)计算机网络基础知识
- 20155328 《信息安全系统设计基础》 第八周学习内容总结
- Java基础学习内容总结
- C#方法有关内容的总结--C#基础
- js课程笔记(一)前五节课基础内容总结
- 关于css基础内容居中的思考与总结
- 安卓基础总结 内容提供者
- Laravel学习总结二:基础内容(Controller)