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

来源:互联网 发布:全景漫游制作软件 编辑:程序博客网 时间:2024/06/10 21:15

   既然说到了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这个工具学好了,他可以帮助我们解决很多问题的,只要你能想到的差不多都可以解决的(有点夸张了哈)。

0 0
原创粉丝点击