`

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
将包含字符串 allen 或 alan 的所有记录打印至标准输出。
示例中的输出是:smiley, allen smith, alan
( ) 在正则表达式中将字符串组合在一起。
命令行:awk '/a(ll)?(nn)?e/'   testfile
将具有字符串 ae 或 alle 或 anne 或 allnne 的所有记录打印至标准输出。
示例中的输出是:smiley, allen smithhern, anne
{m} 指定如果正好有 m 个模式的具体值位于字符串中,则字符串匹配。
命令行:awk '/l{2}/'   testfile
打印至标准输出smiley, allen
{m,} 指定如果至少 m 个模式的具体值在字符串中,则字符串匹配。
命令行:awk '/t{2,}/'   testfile
打印至标准输出:smitters, alexis
{m, n} 指定如果 m 和 n 之间(包含的 m 和 n)个模式的具体值在字符串中(其中m<= n),则字符串匹配。
命令行:awk '/er{1, 2}/'   testfile
打印至标准输出:smithern, harry smithern, anne smitters, alexis
[String] 指定正则表达式与方括号内 String 变量指定的任何字符匹配。
命令行:awk '/sm[a-h]/'   testfile
将具有 sm 后跟以字母顺序从 a 到 h 排列的任何字符的所有记录打印至标准输出。
示例的输出是:
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-awklinux-awk

    ### Linux Awk 学习指南 #### 1. Awk 简介 Awk 是一种专门设计用于处理文本和数据的编程语言,主要用于 Linux/Unix 操作系统中。它可以处理来自标准输入、一个或多个文件,甚至是其他命令的输出结果。Awk 支持高级...

    linux awk学习

    ### Linux Awk 学习知识点详解 #### 一、Awk 简介与基本用法 Awk 是一种在 Unix 和类 Unix 操作系统上广泛使用的文本处理工具,能够帮助用户快速处理文本数据,执行复杂的文本分析任务。Awk 的主要功能包括模式...

    linux awk学习笔记

    Linux中的`awk`是一个强大的文本分析工具,由Alfred Aho、Brian Kernighan和Peter Weinberger三位开发者创建,因此得名。`awk`的主要功能是处理文本和数据,通过匹配特定模式对文件中的行进行操作。在Linux系统中,...

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

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

    LINUX下awk命令详解

    相比其他文本处理工具如 `sed` 和 `grep`,`awk` 提供了更为强大的编程能力,支持变量、算术运算符、控制结构等高级特性。 #### 三、awk 的基本语法 `awk` 的基本语法格式为: ``` awk [选项] '模式 {动作}' 文件名...

    linux AWK 教程

    ### Linux AWK 教程详解 #### 1. AWK 简介 AWK 是一种专门设计用于处理文本和数据的编程语言,它在 Linux 和 Unix 环境下非常流行。AWK 可以从标准输入、一个或多个文件、甚至是其他命令的输出中读取数据。它的...

    Linux AWK 学习资料

    Linux中的AWK是一种强大的文本分析工具,用于对文件或数据流进行模式匹配和处理。它在系统管理和数据分析中被广泛使用。AWK的工作原理是基于用户定义的规则(也称为模式)来处理输入数据,根据这些规则进行筛选、...

    linux下awk工具的使用

    ### Linux 下 awk 工具的使用详解 #### 1. awk 简介 `awk` 是一款在 Linux/Unix 环境下极其强大的文本处理工具,它能够灵活地处理各种格式的数据文件,适用于数据筛选、分析及格式转换等多种场景。`awk` 的主要优势...

    linux-awk-完全手册范本.doc

    "Linux awk 完全手册范本" awk 是一种功能强大的样式扫描和处理工具,能够完成 grep 和 sed 所能完成的全部工作,并且具有样式装入、流控制、数学运算符、进程控制语句、置的变量和函数等功能。awk 的优点是简单、...

    LINUXawk用法[定义].pdf

    `awk` 是一种强大的文本分析工具,常用于处理和解析Linux系统的日志文件或数据文件。在软件开发中,`awk` 是一个不可或缺的工具,因为它允许开发者通过模式匹配和处理来快速提取、转换和过滤数据。以下是 `awk` 的...

    linux下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详细用法中文图解

    AWK中的条件表达式类似于C语言,包括关系运算符(`, `&gt;`, `==`等)和逻辑运算符(`&&`, `||`, `!`)。例如: ```awk $1 &gt; 10 { print $0 } # 如果第一字段大于10,则打印整行 ``` 五、数组与循环 1. AWK支持关联...

    awk详细用法小结awk awk

    #### 五、awk运算符 awk支持多种运算符,包括算术运算符、赋值运算符、比较运算符和逻辑运算符,以及正则表达式运算符。 - **算术运算符**:`+`、`-`、`*`、`/`、`%`、`^`。 - **赋值运算符**:`=`、`+=`、`-=`、`...

    linux/unix awk使用手册

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

    Linux 三剑客 Awk、Sed、Grep 命令详解

    Linux 三剑客 Awk、Sed、Grep 命令详解 AWK 命令详解 AWK(Aho, Weinberger, and Kernighan)是一种功能强大的文本处理语言,主要用于处理文本和数据。它可以从标准输入、文件或其他命令的输出中读取数据,并对其...

    linux正则表达式awk详解

    Linux正则表达式与awk详解 在Linux系统中,正则表达式和awk工具是文本处理的强大武器,正则表达式提供了一种灵活的搜索和匹配模式,而awk则是一个强大的文本分析工具,它可以对文本文件进行模式扫描和处理。本文将...

    awk学习手册.docx

    awk是Linux/Unix环境中强大的文本分析工具,它允许用户基于输入数据的特定模式进行操作。在深入探讨awk的各个方面之前,我们先理解一下它的基本概念。 1. **awk 简介** awk的主要功能是从文件或标准输入中读取一行...

Global site tag (gtag.js) - Google Analytics