- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 播撒阳光爱心 放飞体育希望.doc
- 擦车工人擦车细则.doc
- 擂鼓镇小学2013年“12.4”全国法制宣传活动月实施方案.doc
- 收发文件(资料)登记表.docx
- 放射科2012年介入室护理工作计划.doc
- 教学创新与教师专业发展总结.doc
- 教师严肃工作纪律个人查摆材料.doc
- 教师成长的故事.doc
- 教案 找规 律.doc
- 数学创新意识.doc
- 艺术设计对学生审美能力的培养研究教学研究课题报告.docx
- 数学与区块链技术的联系教学研究课题报告.docx
- 自主学习资源在体育教学中的应用教学研究课题报告.docx
- 2025年浙教新版九年级化学上册月考试卷含答案.docx
- 2024年沪科版八年级数学上册阶段测试试卷含答案 .docx
- 2024年鲁科版七年级生物上册阶段测试试卷.docx
- 2025年医药白凡士林项目可行性研究报告.docx
- 桥梁检测评定与加固技术(第2版) 课件 第8章 8.6 钢绞线网-聚合物砂浆加固技术.pptx
- 2025投资合同设立中外合资经营企业合同(锅炉生产).docx
- 2025年排气辅助制动器项目可行性研究报告.docx
文档评论(0)