您的位置:首页 > 运维架构 > Shell

shell脚本学习笔记 (文本处理器AWK)

2016-06-06 16:40 537 查看
既然说到了shell和正则表达式,那么不得不简单的提提AWk工具。AWK是一种优良的文本处理工具,它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。AWK
提供了极其强大的功能:可以进行样式装入、 控制流、数学运算符、进程控制语句甚至于内置的变量和函数。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

之前说到了sed工具,sed工具的功能已经很强大了,为什么还要说awk呢?awk擅长从格式化报文或从一个大的文本文件中抽取数据,而且awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件,所以说如果文件是格式化的,即由分隔符分为多个域的,优先使用awk。下面就简单说一说awk工具吧.

AWK的基本命令行格式如下:

awk option 'script' file1 file2 ...

awk option -f scriptfile file1 file2 ...
AWK的编辑行格式如下:
/pattern/{actions} (patten部分为正则表达式)
condition{actions} (满足某个条件的部分执行action)
首先写两个简单的例子来熟悉一下AWK的简单用法吧!





第一个例子要说明的是,AWK默认的域分隔符是"空格"或"table",且:$0--表示所有域,$1--表示第一个域,$2--表示第二个域。另外可以观察到
AWK工具的语法接近C语言;第二个例子看可以看出,满足成立后,后面的逻辑会被执行。
接下来就简单讲一下其他特性!
1.BEGIN和END



awk命令的condition部分还可以是两个特殊的condition:BEGIN和END,对于每个待处理文件:
BEGIN后面的actions在处理整个文件之前执行
一次
后面的END actions 在整个文件处理完之后执行一次

2.AWK按域搜索




我们可以看到,AWK以 : 作为分隔符,查找到满足条件的一行,然后打印出最后一个作用域的值,这样可用于提取重要信息,确实大大的简化了工作量,想一想用C语言什么的写一个程序出来该是多么的复杂啊

3.AWK脚本







上述脚本用于统计各个区间的数字出现的次数,测试的结果也在上面的图中显示出来了

4.AWK正则表达式的3中写法
1.正常的正则表达式




2.if语句构成的正则表达式




3.awk内置的正则表达式函数



上面就是三种正则表达式的写法

5.AWK的工作流程



这里主要说明一下AWK的工作流程:
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有\n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

6.awk内置变量&&杂项
我简单的列了一下,大概有以下这些,具体的使用需要多多的练习

ARGC 命令行参数个数
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F 选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
下面给出几个例子演示一下:





7.AWK工具的实际应用,快速解决实际问题
1.统计上级目录底下普通文件的个数



2.过滤掉4096的文件,统计文件的总大小



以上就是awk工具的简单介绍,我在这里只是简单的介绍了一点罢了, 其中以一些是还是比较复杂的,但是这还只是awk的冰山一角,awk的知识远远不止这些。从上面的例子中,我们可以看到awk能够解决的问题确实很多,所以我相信如果把awk这个工具学好了,他可以帮助我们解决很多问题的,只要你能想到的差不多都可以解决的(有点夸张了哈)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: