- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux Shell常用技巧(四)
Linux Shell常用技巧(四)Posted on 2011-11-21 06:48 Stephen_Liu阅读(3921) 评论(1) 编辑收藏九.? 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字符。printf(The character is %c.\n,x)The character is A.%d打印十进制数。printf(The boy is %d years old.\n,y)The boy is 15 years old.%e打印用科学记数法表示的数。printf(z is %e.\n,z)z is 2.3e+01.%f打印浮点数。printf(z is %f.\n,z)z is 2.300000%o打印八进制数。printf(y is %o.\n,y)y is 17.%s打印字符串。printf(The name of the culprit is %s.\n,$1);The name of the culprit is Bob Smith.%x打印十六进制数。printf(y is %x.\n,y)y is f.??? 注:假设列表中的变脸值为x = A, y = 15, z = 2.3, $1 = Bob Smith??? / echo Linux | awk {printf |%-15s|\n, $1}? # %-15s表示保留15个字符的空间,同时左对齐。??? |Linu
文档评论(0)