awk执行行操作及怎样从文本文件和字符串中抽取信息(二) - 第八基地

软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

awk执行行操作及怎样从文本文件和字符串中抽取信息(二)
发布于:第八基地 来源:互联网 作者:天堂路上 时间:2016-04-26 点击:244

awk条件操作符

awk内置变量

awk操作符

内置的字符串函数

==========================================================

awk条件操作符 
操作符描述
< 小于
> = 大于等于 
< = 小于等于
== 等于
!= 不等于 
~ 匹配正则表达式
!~ 不匹配正则表达式 
1. 匹配 
为使一域号匹配正则表达式,使用符号'~'后紧跟正则表达式,也可以用if语句。awk中if后面的条件用()括起来。 
观察文件grade.txt,如果只要显示brown腰带级别可知其所在域为field-4,这样可以写出表达式{if(~/Brown/) print}意即如果field-4包含brown,打印它。如果条件满足,则打印匹配记录行。可以编写下面脚本,因为这是一个动作,必须用花括号{}括起来。代码:[root@Linux_chenwy sam]# awk '{if(~/Brown/) print }' grade.txt 
J.Troll 07/99 4842 Brown-3 12 26 26 
L.Tansl 05/99 4712 Brown-2 12 30 28
匹配记录找到时,如果不特别声明,awk缺省打印整条记录。使用if语句开始有点难,但不要着急,因为有许多方法可以跳过它,并仍保持同样结果。下面例子意即如果记录包含模式brown,就打印它:代码:[root@Linux_chenwy sam]# awk '~/Brown/' grade.txt 
J.Troll 07/99 4842 Brown-3 12 26 26 
L.Tansl 05/99 4712 Brown-2 12 30 28
2. 精确匹配 
假定要使字符串精确匹配,比如说查看学生序号48,文件中有许多学生序号包含48,如果在field-3中查询序号48,awk将返回所有序号带48的记录:
代码:[root@Linux_chenwy sam]# awk '{if(~/48/) print}' grade.txt 
M.Tans 5/99 48311 Green 8 40 44 
J.Lulu 06/99 48317 green 9 24 26 
P.Bunny 02/99 48 Yellow 12 35 28 
J.Troll 07/99 4842 Brown-3 12 26 26 
为精确匹配48,使用等号==,并用单引号括起条件。例如=="48"代码:[root@Linux_chenwy sam]# awk '=="48"' grade.txt 
P.Bunny 02/99 48 Yellow 12 35 28 
[root@Linux_chenwy sam]# awk '{if(=="48") print}' grade.txt 
P.Bunny 02/99 48 Yellow 12 35 28
3. 不匹配 
有时要浏览信息并抽取不匹配操作的记录,与~相反的符号是!~,意即不匹配。像原来使用查询brown腰带级别的匹配操作一样,现在看看不匹配情况。表达式!~/Brown/,意即查询不包含模式brown腰带级别的记录并打印它。 
注意,缺省情况下,awk将打印所有匹配记录,因此这里不必加入动作部分。 
代码:[root@Linux_chenwy sam]# awk '!~/Brown/' grade.txt 
M.Tans 5/99 48311 Green 8 40 44 
J.Lulu 06/99 48317 green 9 24 26 
P.Bunny 02/99 48 Yellow 12 35 28
可以只对field-4进行不匹配操作,方法如下:代码:[root@Linux_chenwy sam]# awk '{if(!~/Brown/) print }' grade.txt 
J.Troll 07/99 4842 Brown-3 12 26 26 
L.Tansl 05/99 4712 Brown-2 12 30 28

对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈