码迷,mamicode.com
首页 > 其他好文 > 详细

awk详解【一】

时间:2015-04-17 22:28:58      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:awk命令常用

awk简介:

    awk是贝尔实验室1977年搞出来的文本神器,对于熟悉使用linux的朋友们来说,awk无疑是强大的。说到awk,就不得不提到一本书。《the awk programming language》据说这本书要将近1k呢。好吧,我没看过。其实linux下有很多强大的文本编辑工具包括(sed |nl |ed |tr |cut |fold |strings等等)先从awk开始吧


【参考手册可以看看下面的链接地址】

http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din-Variables

http://www.gnu.org/software/gawk/manual/gawk.html#Statements

http://www.gnu.org/software/gawk/manual/gawk.html#Built_002din

http://www.gnu.org/software/gawk/manual/gawk.html#Regexp

awk程序结构

      AWK是一种处理文本文件的语言。它将文件作为记录序列处理。在一般情况下,文件内容的每行都是一个记录。每行内容都会被分割成一系列的域,因此,我们可以认为一行的第一个词为第一个域,第二个词为第二个,以此类推。AWK程序是由一些处理特定模式的语句块构成的。AWK一次可以读取一个输入行。对每个输入行,AWK解释器会判断它是否符合程序中出现的各个模式,并执行符合的模式所对应的动作。

awk程序是由一系列模式--动作对组成的,写做:pattern { action}

其中pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。输入行被分成了一些记录:记录默认由换行符分割,因此输入会按照行进行分割。程序使用给定的条件一个个的测试每条记录,并执行测试通过的条件所对应的actionpatternaction都可以省略不写。无pattern默认匹配全部的记录;而无action则是打印原始记录。简单的AWK表达式之外,pattern可以是BEGINEND;这两种条件对应的action分别是读取所有的记录之前和之后。同时,如pattern1, pattern2的条件表示符合条件pattern1pattern2的记录及其之间的部分。

开始实战一下吧:

以/etc/password文件为例:我需要打印用户名和用户所在的gid号。

    其中单引号中的{}就是awk语句,且只能用单引号包含

    这里我使用-F参数指定吧 “:”作为域的分隔符。$1....$n表示第几个域。$0表示整个行。

技术分享匹配输入行中的范围

yes命令代表重复其参数,默认为"y",这里我们让其输出"root and /bin/bash",动作快输出带有行号的内容。NR会记录行号从1开始。“%”求模操作符。所以,NR % 4 ==1对第1,5,9为真。类似的像,NR % 4 ==3对3,7,11等为真。范围模式在其第一部分匹配之前为假,并在第二部分匹配之前为真。然后再第二次匹配上其第一部分前为假。而sed命令测试用于截取其前7行的输出,否则yes命令会一直重复下去,当然也可以用head命令,等效于head -n7.

技术分享关于内置变量:

技术分享如何过滤记录:

&&代表同时成立,==是比较运算符号,比如:!= |> |< |>= |<=

技术分享

这里我们可以引入内置变量NR:

技术分享

指定域分隔符匹配

-F参数等效于BEGIN{FS=":"},可以同时指定多个分隔符,awk -F ‘[,:]‘

技术分享

下面以\t作为域分隔符,\t即tab键

技术分享


未完待续

本文出自 “Hello_World” 博客,请务必保留此出处http://coward.blog.51cto.com/7599475/1634106

awk详解【一】

标签:awk命令常用

原文地址:http://coward.blog.51cto.com/7599475/1634106

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!