Linux Shell常用技巧(五).docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux Shell常用技巧(五)

Linux Shell常用技巧(五)Posted on 2011-11-24 07:34 Stephen_Liu阅读(3443) 评论(0) 编辑收藏十一.? awk编程:??? 1.? 变量:????在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串 ,这主要取决于变量应用的上下文。下面为变量的赋值负号列表:符号含义等价形式=a = 5a = 5+=a = a + 5a += 5-=a = a - 5a -= 5*=a = a * 5a *= 5/=a = a / 5a /= 5%=a = a % 5a %= 5^=a = a ^ 5a ^= 5??? / awk $1 ~ /Tom/ {Wage = $2 * $3; print Wage} filename?? ?该命令将从文件中读取,并查找第一个域字段匹配Tom的记录,再将其第二和第三个字段的乘积赋值给自定义的Wage变量,最后通过print命令将该变量打印输出。??? / awk {$5 = 1000 * $3 / $2; print} filename?? ?在上面的命令中,如果$5不存在,awk将计算表达式1000 * $3 / $2的值,并将其赋值给$5。如果第五个域存在,则用表达式覆盖$5原来的值。?? ?我们同样也可以在命令行中定义自定义的变量,用法如下:??? / awk -F: -f awkscript month=4 year=2011 filename?? ?这里的month和year都是自定义变量,且分别被赋值为4和2000,在awk的脚本中这些变量将可以被直接使用,他们和脚本中定义的变量在使用上没有任何区别。?? ?除此之外,awk还提供了一组内建变量(变量名全部大写),见如下列表:变量名变量内容ARGC命令行参数的数量。ARGIND命令行正在处理的当前文件的AGV的索引。ARGV命令行参数数组。CONVFMT转换数字格式。ENVIRON从shell中传递来的包含当前环境变量的数组。ERRNO当使用close函数或者通过getline函数读取的时候,发生的重新定向错误的描述信息就保存在这个变量中。FIELDWIDTHS在对记录进行固定域宽的分割时,可以替代FS的分隔符的列表。FILENAME当前的输入文件名。FNR当前文件的记录号。FS输入分隔符,默认是空格。IGNORECASE在正则表达式和字符串操作中关闭大小写敏感。NF当前文件域的数量。NR当前文件记录数。OFMT数字输出格式。OFS输出域分隔符。ORS输出记录分隔符。RLENGTH通过match函数匹配的字符串的长度。RS输入记录分隔符。RSTART通过match函数匹配的字符串的偏移量。SUBSEP下标分隔符。??? / cat employees2?? ?Tom Jones:4424:5/12/66:543354?? ?Mary Adams:5346:11/4/63:28765?? ?Sally Chang:1654:7/22/54:650000?? ?Mary Black:1683:9/23/44:336500??? / awk -F: {IGNORECASE = 1}; $1 == maryadams { print NR, $1, $2, $NF} employees2?? ?2 Mary Adams 5346 28765??? / awk -F: $1 == maryadams { print NR, $1, $2, $NF} employees2??? 没有输出结果。?? ?当IGNORECASE内置变量的值为非0时,表示在进行字符串操作和处理正则表达式时关闭大小写敏感。这里的maryadams将匹配文件中的Mary Admams记录。最后print打印出第一、第二和最后一个域。需要说明的是NF表示当前记录域的数量,因此$NF将表示最后一个域的值。?? ?awk在动作部分还提供了BEGIN块和END块。其中BEGIN动作块在awk处理任何输入文件行之前执行。事实上,BEGIN块可以在没有任何输入文件的条件下测试。因为在BEGIN块执行完毕以前awk将不读取任何输入文件。BEGIN块通常被用来改变内建变量的值,如OFS、RS或FS等。也可以用于初始化自定义变量值,或打印输出标题。??? / awk BEGIN {FS = :; OFS = \t; ORS = \n\n} { print $1,$2,$3} filename?? ?上例中awk在处理文件之前,已经将域分隔符(FS)设置为冒号,输出文件域分隔符(OFS)设置为制表符,输出记录分隔符(ORS)被设置为两个换行符。BEGIN之

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档