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命令

 

awk处理的内容可以来自标准输入,一个或多个文本或管道。

       【三剑客】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的行数相等
awk示例

相关文章: