快速掌握awk linux#高级程序员必备技能#
基础语法: awk指令的基本格式是:awk [参数]‘awk程序’文件名 其中awk程序的主要结构是:pattern {action} 一般常使用“关系表达式”来当做pattern,例如:$1>4,$2==$3,"banana"~/an/ ( 这是一个正则匹配的判断关系式,若A为字符串,B为一个正在表达式,A~B(判断字符串A是否包含能匹配B表达式的子字符串);A!~B(判断字符串A是否不包含能匹配B表达式的子字符串)) action主要包括一些指令,如awk的i/o指令:print,printf,getline;awk的流程控制指令:if(...){...}else{...}, do{...}while(); awk程序为每个输入行依次地进行每一个pattern的匹配寻找,对每一个匹配上的模式执行相应的action,接着读取下一行并再次开始匹配,知道所有的输入都处理完毕. 在一条语句中可以省略pattern或action,缺省的pattern为匹配所有行,缺省的动作为输出当前行.awk从输入中一次读取一行(一条记录),缺省的行分隔符为n.然后awk将记录分隔为一个个的字段,缺省的字段分隔为空白.一行中的第一个字段为$1,依次往后$2,$3...,整个记录为$0. awk的内建变量,可使用这些变量来取得相关信息,常见的有: NF(Number of Fields):为一整数,其值表示$0所包含的字段数目. NR(Number of Records):为一整数,其值表示awk已读入的数据行数目. FILENAME:正在处理的数据文件名. 更多的请大家参考http://www.jiayii.com/awk-tutorial/ 基础操作举例:测试文件test.txt,内容如下: (请注意里面的空白有可能是空白,也可能是tab) 1.获取所有John的成绩单,可以用这些命令: awk ''/John/'' test.txt(action默认输出整行) awk ''/John/{print $0}'' test.txt awk ''$2=="John"{print $0}'' test.txt(默认以空白为分隔,$2既代表每行的第二个域) awk ''$2~/John/{print $0}'' test.txt($2和正则表达式/John/匹配) 2.获取成绩大于120的成绩单 awk ''$3>=120'' test.txt 3.如果原数据文件是以“,”分隔的,那么所有的语句都可以增加分隔参数,如:awk -F"," /John/'' test.txt(这就是-F的作用)
BEGIN和END 在awk中两个特别的表单式,可用于pattern中,提供BEGIN和END是给程序赋予初始状态和在程序结束之后执行一些扫尾工作.任何在BEGIN之后列出的操作将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行.因此,通常使用BEGIN来显示变量和预设初始值,使用END来输出最终结果. 还是以上面的文件举例: 1.将John的所有成绩加和,可用命令如下:
2.默认初始成绩为60,再将文件中的成绩累加:
awk数组使用 awk数组使用字符串作为数组的下标;使用时不需要初始化; 实际应用数组运用也是最广的,我们还是以test.txt为数据文件,分别计算各个成员的分数总计:
实际应用 在我使用awk的时候,往往是从线上捞取一些统计数据,而使用时往往这些日志文件都不是很规则,那你可以做的是,通过grep或者其他命令将文件转换为一段具有一定规律的输出,然后再使用awk进行处理.
参考文档: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |