跟老男孩学三剑客命令免费PDF下载

2021-01-26 22:31:41 小八 0点热度 1人阅读

简介:awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语,言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。awk 是三剑客的老大,利剑出鞘,必会不同凡

第一章:Awk 讲解 

1.1.Awk 的讲解 

awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语

言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk

将会使你的工作变的高大上。awk 是三剑客的老大,利剑出鞘,必会不同凡响。

1.2.Awk 实战讲解

1.2.1.awk 的原理

通过一个简短的命令,我们来了解其工作原理。

awk '{print $0}' /etc/passwd

echo hhh|awk '{print "hello,world"}'

awk '{ print "hiya" }' /etc/passwd

你将会见到/etc/passwd 文件的内容出现在眼前。现在,解释 awk 做了些什么。调用 awk

时,我们指定/etc/passwd 作为输入文件。执行 awk 时,它依次对/etc/passwd 中的每一行执

行 print 命令。所有输出都发送到 stdout,所得到的结果与执行 cat /etc/passwd 完全相同。

现在,解释{ print }代码块。在 awk 中,花括号用于将几块代码组合到一起,这一点类

似于 C 语言。在代码块中只有一条 print 命令。在 awk 中,如果只出现 print 命令,那么将

打印当前行的全部内容。

再次说明,awk 对输入文件中的每一行都执行这个脚本。

$ awk -F":" '{ print $1 }' /etc/passwd

$ awk -F":" '{ print $1 $3 }' /etc/passwd

$ awk -F":" '{ print $1 " " $3 }' /etc/passwd

$ awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd

1.2.2.BEGIN 和 END 模块

通常,对于每个输入行,awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,

可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况,awk 允许

您定义一个 BEGIN 块。我们在前一个示例中使用了 BEGIN 块。因为 awk 在开始处理输入文

件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它

在程序中以后会引用的全局变量的极佳位置。

awk 还提供了另一个特殊块,叫作 END 块。awk 在处理了输入文件中的所有行之后执行

这个块。通常,END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。

1.2.3.运算符

表 1.2.3.awk 运算符表

运算符 描 述

赋值运算符

= += -= *= /= %= ^= **= 赋值语句

逻辑运算符

|| 逻辑或

&& 逻辑与

正则运算符

~ !~ 匹配正则表达式和不匹配正则表达式

关系运算符

< <= > >= != == 关系运算符

算术运算符

+ - 加,减

* / & 乘,除与求余

+ - ! 一元加,减和逻辑非

^ *** 求幂

++ -- 增加或减少,作为前缀或后缀

其他运算符

$ 字段引用

空格 字符串链接符

?: 三目运算符

In 数组中是否存在某键值

 awk 赋值运算符

a+5;等价于:a=a+5;其他同类

[root@yum tmp]# awk 'BEGIN{a=5;a+=5;print a}' 

10

 awk 逻辑运算符

[root@yum tmp]# awk 'BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}'

0 1

 awk 正则运算符

[root@yum tmp]# awk 'BEGIN{a="100testaaa";if(a~/100/){print "ok"}}' 

ok

[root@yum tmp]# echo|awk 'BEGIN{a="100testaaa"}a~/100/{print "ok"}' 

ok

 关系运算符

如:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串

就会转换为字符串比较。两个都为数字 才转为数值比较。字符串比较:按照ascii

码顺序比较。

[root@yum tmp]# awk 'BEGIN{a="11";if(a>=9){print "ok"}}'

[root@yum tmp]# awk 'BEGIN{a=11;if(a>=9){print "ok"}}' 

ok

[root@yum tmp]# awk 'BEGIN{a;if(a>=b){print "ok"}}' 

ok

 awk 算术运算符

说明,所有用作算术运算符 进行操作,操作数自动转为数值,所有非数值都变为

0。

[root@yum tmp]# awk 'BEGIN{a="b";print a++,++a}' 

0 2

[root@yum tmp]# awk 'BEGIN{a="20b4";print a++,++a}' 

20 22

 其他运算符

?:三目运算符

[root@yum tmp]# awk 'BEGIN{a="b";print a=="b"?"ok":"err"}'

ok

[root@yum tmp]# awk 'BEGIN{a="b";print a=="c"?"ok":"err"}'

err

in 运算符见后面数组