`
king_tt
  • 浏览: 2109637 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

linux awk 运算符

 
阅读更多

awk 作为文本处理优秀工具之一,它有自己丰富的运算符,可分为:算术运算符,赋值运算符,关系运算符,逻辑预算法,正则运算符。


一、运算符介绍

运算符 描述
赋值运算符
= += -= *= /= %= ^= 赋值语句
逻辑运算符
|| 逻辑或
&& 逻辑与
正则运算符
~ ~! 匹配正则表达式和不匹配正则表达式
关系运算符
< <= > >= != == 关系运算符
算术运算符
+ - 加,减
* / & 乘,除与求余
+ - ! 一元加,减和逻辑非
^ *** 求幂
++ -- 增加或减少,作为前缀或后缀
其它运算符
$ 字段引用
空格 字符串连接符
? : C条件表达式
in 数组中是否存在某键值

说明:awk运算符基本与c语言类似,表达式及功能基本相同


二、实例介绍

1)awk赋值运算符

awk 'BEGIN{a=5; a+=5; print a; a*=2; print a; a^=2; print a; a%=2; print a;}'

结果:

10 # a+=5 -> 10
20 # a*=5 -> 20
400 # a^=2 -> 400
0 # a%=2 -> 0


2)awk逻辑运算符

awk 'BEGIN{a=1; b=2; print (a>0), (b<0), (a>5 && b<=2),(a>5 || b<=2);}'

结果:

1 0 0 1 # true : 1; false : 0


3)awk正则运算符

awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'

结果:

ok # a 是否符合正则匹配: 字符串a是以100开头; 示例符合100开头,因此正则匹配成功


4)awk关系运算符

awk 'BEGIN{a=11; if(a >= 9){print "ok";}}' # 数值比较

结果:

ok


awk 'BEGIN{a="11"; if(a >= 9){print "ok";} else{print "no";}}' # 字符串比较

结果:

no


说明:

> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果只要有一个是字符串,就会转换为字符串比较。两个都为数字,才转为数值比较。字符串比较,按照ascii码顺序比较原则。

如示例2 字符串比较,起始字符“1”在“9“之前,因此小于“9”,结果为“no”。


5)awk算术运算符

awk 'BEGIN{a="12"; print a, a++,++a; print a+2, a*2, a^2, !a}'

结果:
12 12 14 # a = 12 a++ = 12 ++a = 14
16 28 196 0 # 14 + 2 14 * 2 14 ^ 2 !14


6)其它运算符

a) ? :

awk 'BEGIN{a="b"; print a=="b" ? "ok" : "err";}'

结果:

ok


b) in

awk 'BEGIN{a="b"; arr[0]="b"; arr["b"]="c"; print (a in arr); print arr[a];}'

结果:

1 # arr下标中含有a(“b”),注意是下标,不是数值
c # arr[a] = arr["b"] = "c" ,先把a作为下标,然后根据下标取数值


c) 空格

awk 'BEGIN{arr="a b c d"; gsub(/ +/, "#", arr); print arr;}'

结果:

a#b#c#d # 正则匹配替换多个空格为“#”


d) $

echo "a b c d" | awk '{print $1, $3}'

结果:

a c # 打印第1和第3个域值,默认以空格分割



三、字符串操作

awk中的数据类型是不需要定义,而是根据上下文语义自适应的,有时候需要强制转换。

1) 字符串 -> 数字

只需要将变量通过”+”连接运算,自动强制将字符串转为整型,非数字变成0(发现第一个非数字字符,后面自动忽略)

示例: awk 'BEGIN{a="100";b="10test1"; print (a+b+5);}'

结果: 115


2) 数字 -> 字符串

只需要将变量与””符号连接起来运算即可。

示例:awk 'BEGIN{a=100; b=100; c=(a" "b); print c; a="101"; b=102; print a""b;}'

结果:

100 100
101102


3) 字符串连接

字符串连接操作通”二“,”+”号操作符,模式强制将左右两边的值转为数字类型,然后进行操作。

示例:awk 'BEGIN{a="a"; b="b"; c=(a""b); print c}'

结果: ab


示例:awk 'BEGIN{a="a"; b="b"; c=(a+b); print a, b, c}'

结果:a b 0 # “+”号把字符转为数字,第一个非数字转为0,因此 0+0=0



四、正则表达式

awk作为文本处理工具,是少不了正则表达式的。正则表达式就像一门程序语言,有自己语法规则。

对于不同工具,其实大部分表示意思相同的。在linux众多文本处理工具(awk、sed、grep、perl)里面都用到正则表达式。正则表达式其实就只有3种类型,详细可以参考:linux shell 正则表达式(BREs,EREs,PREs)差异比较


1) 正则式语法

字符 功能
+ 指定一个或多个字符,或扩展正则表达式的具体值(在+(加号)前)在这个字符串中,则字符串匹配。
命令行:awk '/smith+ern/' testfile

将包含字符smit,后跟一个或多个h字符,并以字符ern结束的字符串的任何记录打印至标准输出。

示例中的输出是:smithern, harry smithhern, anne

? 指定如果零个或一个字符或扩展正则表达式的具体值(在 ?(问号)之前)在字符串中,则字符串匹配。
命令行:awk '/smith?/' testfile
将包含字符smit,后跟零个或一个h字符的实例的所有记录打印至标准输出。
示例中的输出是:smith, alan smithern, harry smithhern, anne smitters, alexis
| 指定如果以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。
命令行:awk '/allen | alan /' testfile
将包含字符串allenalan的所有记录打印至标准输出。
示例中的输出是:smiley, allen smith, alan
( ) 在正则表达式中将字符串组合在一起。
命令行:awk '/a(ll)?(nn)?e/' testfile
将具有字符串aealleanneallnne的所有记录打印至标准输出。
示例中的输出是:smiley, allen smithhern, anne
{m} 指定如果正好有m个模式的具体值位于字符串中,则字符串匹配。
命令行:awk '/l{2}/' testfile
打印至标准输出smiley, allen
{m,} 指定如果至少m个模式的具体值在字符串中,则字符串匹配。
命令行:awk '/t{2,}/' testfile
打印至标准输出:smitters, alexis
{m, n} 指定如果mn之间(包含的 m 和 n)个模式的具体值在字符串中(其中m<=n),则字符串匹配。
命令行:awk '/er{1, 2}/' testfile
打印至标准输出:smithern, harry smithern, anne smitters, alexis
[String] 指定正则表达式与方括号内String变量指定的任何字符匹配。
命令行:awk '/sm[a-h]/' testfile
将具有sm后跟以字母顺序从ah排列的任何字符的所有记录打印至标准输出。
示例的输出是:
smawley, andy
[^String] 在 [ ](方括号)和在指定字符串开头的 ^ (插入记号) 指明正则表达式与方括号内的任何字符匹配。这样
命令行:awk '/sm[^a-h]/' testfile
打印至标准输出:smiley, allen smith, alan smithern, harry smithhern, anne smitters, alexis
~,!~ 表示指定变量与正则表达式匹配(代字号)或不匹配(代字号、感叹号)的条件语句。
命令行awk '$1 ~ /n/' testfile
将第一个字段包含字符n的所有记录打印至标准输出。
示例中的输出是:
smithern, harry smithhern, anne
^ 指定字段或记录的开头。
命令行:awk '$2 ~ /^h/' testfile
将把字符h作为第二个字段的第一个字符的所有记录打印至标准输出。
示例中的输出是:
smithern, harry
$ 指定字段或记录的末尾。
命令行:awk '$2 ~ /y$/' testfile
将把字符y作为第二个字段的最后一个字符的所有记录打印至标准输出。
示例中的输出是:
smawley, andy smithern, harry
.(句号) 表示除了在空白末尾的终端换行字符以外的任何一个字符。
命令行:awk '/a..e/' testfile
将具有以两个字符隔开的字符a和 e 的所有记录打印至标准输出。
示例中的输出是:
smawley, andy smiley, allen smithhern, anne
*(星号) 表示零个或更多的任意字符。
命令行:awk '/a.*e/' testfile
将具有以零个或更多字符隔开的字符a和 e 的所有记录打印至标准输出。
示例中的输出是:
smawley, andy smiley, allen smithhern, anne smitters, alexis
\(反斜杠) 转义字符。当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。例如,
命令行:/a\/\//
将与模式 a // 匹配,因为反斜杠否定斜杠作为正则表达式定界符的通常含义。要将反斜杠本身指定为字符,则使用双反斜杠。有关反斜杠及其使用的更多信息,请参阅以下关于转义序列的内容。

注: javascript、.net、java支持的正则表达式,基本上同上表


2) 正则式实例

a、 基本语法

awk ‘/REG/ {action}’

说明: /REG/为正则表达式,可以将当前一行记录$0中,满足条件的记录送入到 action进行处理


示例:awk 'BEGIN{info="this is a test"; if( info ~ /test/){print "ok"}}' # ~ 正则匹配符,表示是否满足正则匹配

结果: ok


b、 正则函数

gsub( Ere, Repl, [ In ] )

sub( Ere, Repl, [ In ] )

match( String, Ere )

split( String, A, [Ere] )

详细用法,请参加linux awk 内置函数实例




参考推荐:

awk 实例(IBM)

沉于思考,默默学习

linux awk 内置函数实例

linux awk 内置变量实例

linux awk 数组和循环


分享到:
评论

相关推荐

    Linux awk 快速掌握 超牛中文思维导图

    AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, ...

    Awk学习笔记

    5. awk运算符 6. 记录和域 6.1. 记录 6.2. 域 6.3. 域分隔符 7. gawk专用正则表达式元字符 8. POSIX字符集 9. 匹配操作符(~) 10. 比较表达式 11. 范围模板 12. 一个验证passwd文件有效性的例子 13. 几个...

    linux/unix awk使用手册

    linux/unix awk使用手册 AWK 的功能是什么?与 sed 和 grep 很相似,awk 是一种样式扫描与处理工具。但其功能却大大强于 sed 和 grep。awk 提供了极其强大的功能:它几乎可以完成 grep 和 sed 所能完成的全部工作,...

    linux 文本扫描与处理--awk 使用手册

    awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美...

    awk命令调研文档(PDF)

    awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。awk的三位创建者已将它正式定义为:样式扫描和...

    新版Linux Shell编程实训(全)20170518.docx

    任务11.4 学习和使用awk 185 练习(第一题10分,第2-7每题15分,共计100分) 188 项目十二 Shell的调试 189 [学习目标] 189 任务12.1 使用trap命令 190 任务12.2 使用tee命令 192 任务12.3 使用“调试钩子” 193 ...

    LINUX and SHELL 自学总结

    1. #AWK命令用法 7 2. 搜索文件夹或文件命令 7 3. RPM解包和TAR解包 7 #rpm 强制安装 7 4. 统计某字符串数量 7 5. #DD命令使用总结 8 6. #REV 字符串反向命令 8 7. 变量截取 8 8. #UNIQ 去掉重复 8 9. #SORT 排序 8 ...

    Linux课程教学实习要求

    两个操作数和一个运算符由位置参数给出 在屏幕上分别显示操作数、运算符和运算结果. (8)按照运行结果编写Shell程序: (9)逆序输出一个字符串 (10)冒泡法对10个数按升序排序 (11)编写1个menu的Shell程序。 #!...

    redhat linux教材20课程学习文档

    第一部分 Linux简介和原理介绍 第一章 概述 1.1 Linux 的历史及背景 1.1.1 什么是 Linux? 1.1.2 Linux 该怎么念? 1.1.3 Linux 的历史 1.1.4 Linux的优点 1.2 Linux与开源软件 1.3 Linux 与 Windows 的比较 1.3.1 ...

    gawk官方手册

    AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, ...

    跟老男孩学Linux运维:Shell编程实战

    / 554.4 Shell特殊扩展变量的知识与实践 / 60第5章 变量的数值计算实践 / 655.1 算术运算符 / 655.2 双小括号“(())”数值运算命令 / 665.3 let运算命令的用法 / 735.4 expr命令的用法 / 755.5 bc命令的用法 ...

    UNIX shell 编程指南

    linux shell 变量和运算符 执行Shell脚本的方式 [小函数]:bash版rev&tac shell编程走马观花系列(KSH下set选项) 文章出处:http://www.diybl.com/chm/htm/3_program/shell/shelljs/2008821/2008821102938.html

    宋劲彬的嵌入式C语言一站式编程

    4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1. 信号的基本概念 2. 产生信号 2.1. 通过终端按键产生信号 2.2. 调用系统函数向进程发信号 2.3. 由软件条件产生信号 3. 阻塞信号 3.1. 信号在内核中的表示 3.2. ...

    C程序设计语言(第2版·新版中文)

    他参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作,如《The C Proguamming Language》、《The Elementsof Programming Style》等。 推荐资源 C# 编程实例与技巧 ...

    shell从入门到精通

    shell基础知识、shell字符串处理、shell表达式与运算符、shell流程控制、shell函数与数组、shell正则表达式、shell文本处理三剑客(grep、sed、awk)、shell标准输入、输出和错误、shell信号发送与捕捉、shell编程时...

Global site tag (gtag.js) - Google Analytics