网站大量收购闲置独家精品文档,联系QQ:2885784924

AWK使用技巧.docx

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

awk 使用技巧文模仿十三问,以提问和回答的方式介绍awk的一些基础知识。论坛里awk高手众多,有错误的地方还请大家指正。 具体版本如下: ly5066113@ubuntu:~$ uname -a Linux ubuntu 2.6.24-22-generic #1 SMP Mon Nov 24 19:35:06 UTC 2008 x86_64 GNU/Linux ly5066113@ubuntu:~$ bash --version GNU bash, version 3.2.39(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc. ly5066113@ubuntu:~$ awk --version GNU Awk 3.1.6 Copyright (C) 1989, 1991-2007 Free Software Foundation. 复制代码 一、RS 与 ORS 差在哪 ??我们经常会说,awk是基于行列操作文本的,但如何定义“行”呢?这就是RS的作用。 ??默认情况下,RS的值是\n。下面通过实例来理解下RS。 ly5066113@ubuntu:~$ echo 1a2a3a4a5 | awk {print $1} 1a2a3a4a5 ly5066113@ubuntu:~$ echo 1a2a3a4a5 | awk BEGIN{RS=a}{print $1} 1 2 3 4 5 复制代码 我们可以看到,在更改了RS的值后,awk定义的行已经不是我们实际意义中的行了。 ??上面RS固定的字符串,RS也可以定义为正则表达式。 ly5066113@ubuntu:~$ echo 1ab2bc3cd4de5 | awk BEGIN{RS=[a-z]+}{print $1,RS,RT} 1 [a-z]+ ab 2 [a-z]+ bc 3 [a-z]+ cd 4 [a-z]+ de 5 [a-z]+ 复制代码 当我们将RS设置为正则表达式的时候,RT这个变量就有作用了,RS的值始终为我们设定的正则,RT的值则是这个正则实际匹配到的内容。 ??下面我们看看将RS设置为空会是什么情况 ly5066113@ubuntu:~$ cat urfile 1 2 3 4 ly5066113@ubuntu:~$ awk BEGIN{RS=}{print $0} urfile 1 2 3 4 复制代码 如果RS被设置为空,那么awk会将连续的空行作为行分隔符,与RS设置成\n\n+有什么区别??? ??1、忽略文件开头和结尾的空行。且文件不以记录分隔符结束,即最后不是空行,会将最后一个记录的尾\n去掉 ??2、不设置RT变量(测试未发现规律,暂时认为RT变量不可用) ??3、影响FS变量 ??这个怎么理解?对于1、2两点,当作习题留给大家自己测试,3我们下节来讲。 ??总结下RS的3种情况: ??1) 非空字符串 ? ???以固定字符串作为行分隔符,同时设置变量RT为固定字符串 ??2) 正则表达式 ? ???以正则表达式作为行分隔符,同时设置变量RT为正则表达式实际匹配到的字符串 ??3) 空字符 ? ???以连续的空行作为行分隔符,如果FS为单个字符,会将\n强制加入到FS变量中 ??理解了RS,再来理解ORS就简单了。RS是awk读取文件时的行分隔符,ORS则是awk输出时的行结束符。 ??更简单的讲,就是awk在输出时,会在每行记录后面增加一个ORS变量所设定的值。 ??ORS的值只能设定为字符串,默认情况下,ORS的值是\n ly5066113@ubuntu:~$ seq 5 | awk {print $0} 1 2 3 4 5 ly5066113@ubuntu:~$ seq 5 | awk BEGIN{ORS=a}{print $0} 1a2a3a4a5a 复制代码 我们平常用的 print $0 等价于 printf $0 ORS 二、FS 与 OFS 差在哪 ??RS是awk用来定义“行”的,那么FS就是awk用来定义“列”的。 ??设置变量 FS 与使用 -F 参数是一样的。 ly5066113@ubuntu:~$ echo 1,2 | awk -F , {print $1} 1 ly5066113@ubuntu:~$ echo 1,2 | awk BEGIN{FS=,}{print $1} 1 复制代码 与 RS 类似,FS 同样可以设置为正则表达式 ly5066113@ubuntu:~$ echo 1ab2bc3cd4de5 | awk BEGIN{FS=[a-z]+}{pr

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档