awk是一种很棒的语言,它适合文本处理和报表生成。
- 模式扫描和处理。处理文本流。
awk不仅仅是Linux系统中的一个命令,而是一种编程语言,可以用来处理数据和生成报告。
处理的数据:
- 可以是一个或多个文件
- 可以是来自标准输入
- 也可以通过管道获取标准输入
awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。
awk中的概念:
- 字段(域)与记录
- 模式匹配
- 基本的awk执行过程
- awk常用内置变量
- awk数组(工作常用)
- awk语法:循环,条件
- awk常用函数
- 向awk传递参数
- awk引用shell变量
- awk编程
1. awk实战讲解
1.1 awk的环境简介
涉及的awk为gawk,即为GNU版本的awk。
[root@oldboy test]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@oldboy test]# uname -r
2.6.32-573.el6.x86_64
[root@oldboy test]# ll `which awk`
lrwxrwxrwx. 1 root root 4 Aug 30 07:19 /bin/awk -> gawk
[root@oldboy test]# awk --version
GNU Awk 3.1.7
1.2 awk的格式
awk指令是由模式,动作,或者模式和动作的组合组成。
模式pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。比如NR==1,这就是模式,可以把他理解为一个条件。
动作action,是由在大括号{} 里面的一条或多条语句组成,语句之间使用分号隔开。
awk处理的内容可以来自标准输入,一个或多个文本或管道。
1.3 awk的原理
通过一个简单的命令,我们来了解其工作原理。
awk '{print $0}' /etc/passwd
echo hhh|awk '{print "hello,world"}'
awk '{print "hiya"}' /etc/passwd
输出:
[root@oldboy /]# awk '{print $0}' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ... stu06:x:831:831::/home/stu06:/bin/bash stu07:x:832:832::/home/stu07:/bin/bash stu08:x:833:833::/home/stu08:/bin/bash stu09:x:834:834::/home/stu09:/bin/bash stu10:x:835:835::/home/stu10:/bin/bash [root@oldboy /]# echo hhh|awk '{print "hello,world"}' hello,world [root@oldboy /]# awk '{print "hiya"}' /etc/passwd hiya hiya ... hiya hiya hiya hiya hiya # 行数和/etc/passwd的行数相等