九.? awk实用功能:
?? ?和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行“选择”动作。如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上。如果一个动作没有模板,所有被动作指定的行都被处理。
?? ?
?? 1.? awk的基本格式:
?? ?/> awk 'pattern' filename
?? ?/> awk '{action}' filename
?? ?/> awk 'pattern {action}' filename
?? ?
?? ?具体应用方式分别见如下三个用例:
?? ?/> cat employees
?? ?Tom Jones???????? 4424??? 5/12/66???????? 543354
?? ?Mary Adams????? 5346??? 11/4/63???????? 28765
?? ?Sally Chang?????? 1654??? 7/22/54???????? 650000
?? ?Billy Black???????? 1683??? 9/23/44???????? 336500
?? ?/> awk '/Mary/' employees?? #打印所有包含模板Mary的行。
?? ?Mary Adams????? 5346??? 11/4/63???????? 28765
?? ?#打印文件中的第一个字段,这个域在每一行的开始,缺省由空格或其它分隔符。
?? ?/> awk '{print $1}' employees
?? ?Tom
?? ?Mary
?? ?Sally
?? ?Billy
?? ?
?? ?/> awk '/Sally/{print $1, $2}' employees #打印包含模板Sally的行的第一、第二个域字段。
?? ?Sally Chang
?? ?
?? ?2.? awk的格式输出:
?? ?awk中同时提供了print和printf两种打印输出的函数,其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数 用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。下面给出基本的转码序 列:
转码 | 含义 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
? ? /> date | awk '{print "Month: " $2 "\nYear: ", $6}'
?? ?Month: Oct
?? ?Year:? 2011
? ? /> awk '/Sally/{print "\t\tHave a nice day, " $1,$2 "\!"}' employees
?? ???????????????? Have a nice day, Sally Chang!
?? ?在打印数字的时候你也许想控制数字的格式,我们通常用printf来完成这个功能。awk的特殊变量OFMT也可以在使用print函数的时候,控制数字的打印格式。它的默认值是"%.6g"----小数点后面6位将被打印。
? ? /> awk 'BEGIN { OFMT="%.2f"; print 1.2456789, 12E-2}'
?? ?1.25? 0.12
?? ?现在我们介绍一下功能更为强大的printf函数,其用法和c语言中printf基本相似。下面我们给出awk中printf的格式化说明符列表:
格式化说明符 | 功能 | 示例 | 结果 |
%c | 打印单个ASCII字符。 |
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|