ITPub博客

首页 > > > shell三剑客2

shell三剑客2

作者:longmanma 时间:2019-12-10 13:48:19 0 删除 编辑

2.3)awk对记录(行)的提取

记录提取:提取一个文本中的一行并打印输出

记录的提取方法有两种:a、通过行号 b、通过正则匹配

记录相关内置变量

NR: 指定行号

提取test第三行数据

指定行号为3

[root@www ~]# awk 'NR==3{print $0}' test

3 the quick brown fox jumps over the lazy cat . dog

指定行的第一个字段精确匹配字符串为3

[root@www ~]# awk '$1=="3"{print $0}' test

3 the quick brown fox jumps over the lazy cat . dog

2.4)awk对字符串提取

记录和字段的汇合点就是字符串

打印test第三行的第六个字段

[root@www ~]# awk 'NR==3{print $6}' test

jumps

2.5)awk程序的优先级

关于awk程序的执行优先级,BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;END是处理完数据流后的操作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

优先级展示

[root@www ~]# awk 'BEGIN{print "hello ayitula"}{print $0}END{print "bye ayitula"}' test

hello ayitula

1 the quick brown fox jumps over the lazy cat . dog

2 the quick brown fox jumps over the lazy cat . dog

3 the quick brown fox jumps over the lazy cat . dog

4 the quick brown fox jumps over the lazy cat . dog

5 the quick brown fox jumps over the lazy cat . dog

bye ayitula

不需要数据源,可以直接执行

[root@www ~]# awk 'BEGIN{print "hello world"}'

hello world

没有提供数据流,所以无法执行成功

[root@www ~]# awk '{print "hello world"}'

[root@www ~]# awk 'END{print "hello world"}'

三、awk高级用法

awk是一门语言,那么就会符合语言的特性,除了可以定义变量外,还可以定义数组,还可以进行运算,流程控制,我们接下来看看吧。

3.1)awk定义数组

数组定义方式: 数组名[索引]=值

定义数组array,有两个元素,分别是100,200,打印数组元素。

[root@www ~]# awk 'BEGIN{array[0]=100;array[1]=200;print array[0],array[1]}'

100 200

3.2)awk运算

赋值运算 =

比较运算 > >= == < <= !=

数学运算 + - * / % ** ++ --

逻辑运算 && ||

匹配运算 ~ !~

1.赋值运算:主要是对变量或者数组赋值,如:

变量赋值 name='baism' school='ayitula'

数组赋值 array[0]=100

[root@www ~]# awk -v name='baism' 'BEGIN{print name}'

baism

[root@www ~]# awk 'BEGIN{school="ayitula";print school}'

ayitula

[root@www ~]# awk 'BEGIN{array[0]=100;print array[0]}'

100

2.比较运算,如果比较的是字符串则按ascii编码顺序表比较。如果结果返回为真则用1表示,如果返回为假则用0表示

[root@www ~]# awk 'BEGIN{print "a" >= "b" }'

[root@www ~]# awk 'BEGIN{print "a" <= "b" }'

1

[root@www ~]# awk '$1>4{print $0}' test

5 the quick brown fox jumps over the lazy cat . dog

[root@www ~]# awk 'BEGIN{print 100 >= 1 }'

1

[root@www ~]# awk 'BEGIN{print 100 == 1 }'

[root@www ~]# awk 'BEGIN{print 100 <= 1 }'

[root@www ~]# awk 'BEGIN{print 100 < 1 }'

[root@www ~]# awk 'BEGIN{print 100 != 1 }'

1

3.数学运算

[root@www ~]# awk 'BEGIN{print 100+3 }'

103

[root@www ~]# awk 'BEGIN{print 100-3 }'

97

[root@www ~]# awk 'BEGIN{print 100*3 }'

300

[root@www ~]# awk 'BEGIN{print 100/3 }'

33.3333

[root@www ~]# awk 'BEGIN{print 100**3 }'

1000000

[root@www ~]# awk 'BEGIN{print 100%3 }'

1

[root@www ~]# awk -v 'count=0' 'BEGIN{count++;print count}'

1

[root@www ~]# awk -v 'count=0' 'BEGIN{count--;print count}'

-1

4.逻辑运算

与运算:真真为真,真假为假,假假为假

[root@www ~]# awk 'BEGIN{print 100>=2 && 100>=3 }'

1

[root@www ~]# awk 'BEGIN{print 100>=2 && 1>=100 }'

或运算:真真为真,真假为真,假假为假

[root@www ~]# awk 'BEGIN{print 100>=2 || 1>=100 }'

1

[root@www ~]# awk 'BEGIN{print 100>=200 || 1>=100 }'

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2730/viewspace-3152096/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-18

  • 博文量
    492
  • 访问量
    11996