分类: linux shell脚本学习2012-09-19 15:53 1241人阅读 评论(0) 收藏 举报

如果要格式化报文或从一个大的文本文件中抽取数据包,那么awk可以完成这些任务。

为了获取所需信息,文本必须格式化,也就是说要使用域分隔符来划分抽取域,分隔符可以使任意字符。

awk语言的最基本功能是在文件或字符串中基于指定规格浏览和抽取信息。awk抽取信息后,才能进行其他文本操作。awk脚本通常用来格式化文本文件中的信息。

1.调用awk

①命令行的方式:

  1. awk [-F field-separator] 'commands' input-file(s)  //‘commands’是真正的awk命令

[-F 域分隔符]是可选的,awk使用空格作为缺省的域分隔符

②将所有awk命令插入到一个文件,是awk程序可执行,然后使用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用。

③将所有的awk命令插入到一个单独文件,然后调用。

  1. awk -f awk-script-file input-files(s)

2.awk脚本

在命令中调用awk时,awk脚本由各种操作和模式组成。

awk每次读一条记录或一行,并使用指定的分隔符分隔指定域。

①模式和动作

任何awk语句都是由模式和动作组成。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式,动作将时刻保持执行状态。

模式可以使任何条件语句或复合表达式或正则表达式。

模式包含两个特殊字符BEGIN和END。

BEGIN语句设置计数和打印头。使用在任何文本浏览动作之前。

END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志,不特别指明模式,awk总是匹配或打印行数。

3.域和记录

awk执行时,其浏览域标记为$1,$2,...$n。$n表示参照第n域,$0表示所有域,用逗号来做域分隔。

打印一个或所有域,使用print命令。这是一个awk动作,动作语法用'{  }'括起来。

①抽取域

例:

  1. M.Tansley     05/99   48311   Green   8   40  44
  2. J.Lulu     06/99   48317   green   9   24  26
  3. P.Bunny    02/99   48      Yellow  12  35  28
  4. J.Troll    07/99   4842    Brown-3 12  26  26
  5. L.Tansley  05/99   4712    Brown-2 12  30  28

首先要抽取文件中的信息,将它们划分成域的形式。

②保存awk输出

有两种方式保存shell提示符下的awk脚本输出。

其一是使用输出重定向符号 >文件名

  1. awk '{print $0}' readfile > savefile

第二种方法是使用tee命令,在输出到文件的同时输出到屏幕。

  1. awk '{print $0}' readfile | tee savefile

③使用标准输入

实际上任何脚本都是从标准输入中接受输入的。

  1. 方式一:$awkscript readfile
  2. 方式二(重定向):$awkscript < radfile
  3. 方式三(管道):$readfile | awkscript

④打印所有记录

  1. awk '{print $0}' readfile   //打印整个文件

⑤打印单独记录

使用$1,$2...$n,域标示之间用逗号隔开

  1. awk '{print $1,$4}' readfile    //打印域1和域4

⑥打印报告头

  1. awk 'BEGIN {print "xxxx"}{print $1"\t"$4}' readfile

⑦打印信息尾

  1. awk 'BEGIN {print "xxx"} {print $1} END {print "end"}' readfile

4.awk中的正则表达式

这里正则表达式用斜线括起来, /字符串/
①匹配

使域号匹配表达式,使用符号'~'后紧跟正则表达式,也可以使用if语句。awk中if语句后面的条件用()括起来。

  1. awk '{if($4~/字符串/) print $0}' readfile  //如果域4包含匹配的字符串,打印整句
  2. awk '{$0 ~ /字符串/'} readfile //如果记录包含匹配的字符串,打印整句

②精确匹配

  1. awk '{if($3 ~ /字符串/) print $0}' readfile    //包含字符串的所有记录都匹配,不精确
  1. awk '$3 == "字符串" {print $0}' readfile   //确保只有字符串得以匹配,精确匹配

③不匹配

  1. awk '{if($4 !~ /匹配字符串/) print $0}' readfile

④小于

  1. awk '{if($6<$7) print "xxx"}' readfile

⑤小于等于

  1. awk '{if($6<=$7) print "xxx"}' readfile

⑥大于

  1. awk '{if($6》$7) print "xxx"}' readfile

⑦设置大小写

为查询大小写信息,可以使用[ ]符号

  1. awk '/[Gg]reen/' readfile   //匹配green Green的行

⑧任意字符

  1. awk '$1 ~/^...a/' readfile  //抽取域1,其记录第一域的第四个字符时a

⑨或关系匹配

使用或关系符时,语句必须用圆括号括起来

  1. awk '$0 ~ /(字符串1|字符串2)/' readfile   //匹配|两边模式之一

⑩行首

  1. awk '/^字符串/' readfile

其他

&&   AND:语句两边必须同时为真

||  OR:语句两边同时或其中一边匹配为真
! 非 求逆

shell之文本过滤(awk)的更多相关文章

  1. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  2. shell之文本过滤(正则表达式)

    shell之文本过滤(正则表达式) 分类: linux shell脚本学习2012-09-14 12:59 213人阅读 评论(0) 收藏 举报 当从一个文件或命令输出中抽取或过滤文本时,可以使用正则 ...

  3. shell之文本过滤(grep)

    shell之文本过滤(grep) 分类: linux shell脚本学习2012-09-14 14:17 588人阅读 评论(0) 收藏 举报 shell正则表达式扩展工具存储 grep(全局正则表达 ...

  4. shell 强大的awk

    from here 小用法,使用awk来对文件随机抽取n行 awk 'BEGIN{srand()} {print rand()"\t"$0}' input_file | sort ...

  5. shell下的 awk/sed/grep/seq/tr

    转自:实例手册 https://github.com/liquanzhou/ops_doc/blob/master/shell%E5%AE%9E%E4%BE%8B%E6%89%8B%E5%86%8C. ...

  6. shell 三剑客之 awk

    awk 是shell 里的常用命令,非常强大!

  7. shell编程之awk

    awk是一种用于处理数据和生成报告的编程语言 awk可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题 awk与grep.sed结合使用,将使shell编程更加容易 awk工作模式 ...

  8. shell语句记录-awk

    cat ./daily_uv/daily_uv_20140104 | awk '{fr[$1]+=$3; k=$1 "_" $2; av[k]+=$3;} END{for (k i ...

  9. SHELL脚本之awk妙用

    对于一个sougou文本文件,解压后大概4G,要求在其基础上切出第一列时间年月日时分秒增加在列中,作为hive的一个索引.先将文件head一下展示格式: [root@Master date]# hea ...

随机推荐

  1. Activity启动模式分类(一)

    standerd 默认模式,每次启动Activity都会创建一个新的Activity实例. 比如:现在有个A Activity,我们在A上面启动B,再然后在B上面启动A,其过程如图所示: single ...

  2. LeetCode.1010-歌曲总长度可被60整除的对数

    这是小川的第377次更新,第405篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第239题(顺位题号是1010).在歌曲列表中,第i首歌曲的持续时间为[i]秒. 返回其总 ...

  3. magento下载地址

    https://download.magentochina.org/magento/2/ https://www.magentochina.org/blog/download-install-mage ...

  4. vue-cli3.0使用及部分配置详解

    1.检测安装   vue-V 2.创建项目命令:(官网) 3.简单的配置信息 这里如果你是第一次用3.0版本的话,是没有前两个的,而只有最后两个,这里是 让你选的,第一个是默认配置,一般选第二个,自己 ...

  5. Spring MVC 中使用AOP 进行事务管理--XML配置实现

    1.今天写一篇使用AOP进行事务管理的示例,关于事务首先需要了解以下几点 (1)事务的特性 原子性(Atomicity):事务是一个原子操作,由一系列动作组成.事务的原子性确保动作要么全部完成,要么完 ...

  6. tp5框架用foreach循环时候报Indirect modification of overloaded element of think\paginator\driver\Bootst错误

    thinkphp5使用paginator分页查询数据后,需要foreach便利处理某一字段的数据,会出现类似题目的错误.主要是因为tp5使用分页类读取的数据不是纯数组的格式!所以在循环的时候需要用数据 ...

  7. Cookie、Session和LocalStorage

    前记 前面我已经写了一篇关于Cookie的文章,但是那时候我其实理解的并不是很深刻,会有些搞不懂的地方,今天我就再写一次,博客也是我的学习笔记 Cookie Cookie是服务器发送到用户浏览器并保存 ...

  8. Jpa/Hibernate 字节码增强:字段延迟加载

    JPA提供了@Basic注解,实现延迟加载字段的功能,如下: @Basic(fetch = FetchType.LAZY) @Column(name = "REMARK_CONTENT&qu ...

  9. 初探html-9 链接

    HTML 链接 HTML 使用超级链接与网络上的另一个文档相连.几乎可以在所有的网页中找到链接.点击链接可以从一张页面跳转到另一张页面. 尝试一下 - 实例 <!DOCTYPE html> ...

  10. webpack4导入jQuery的新方案

    本文的目的 拒绝全局导入jQuery!! 拒绝script导入jQuery!! 找到一种只在当前js组件中引入jQuery,并且使用webpack切割打包的方案! 测试环境 以下测试在webpack3 ...